微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jQuery,在多个动画后只调用一次回调

让我们说,我有几个动画一次运行,我想调用一个函数,一旦所有的完成。

只有一个动画,很容易;有一个回调。例如 :

$(".myclass").fadeOut(slow,mycallback);

麻烦的是,如果我的选择器找到几个项目,回调将被调用每个。

解决方法不是太难;例如 :

<!DOCTYPE html>
<html>
<head>
  <title>Example</title>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
      var $mc=$(".myclass"),l=$mc.length;
      $mc.fadeOut("slow",function(){
        if (! --l) $("#target").append("<p>All done.</p>");
      });
    });
  </script>
  <style type="text/css">
  </style>
</head>
<body>
  <p class="myclass">Paragraph</p>
  <p class="myclass">Paragraph</p>
  <p class="myclass">Paragraph</p>
  <p class="myclass">Paragraph</p>
  <p class="myclass">Paragraph</p>
  <p class="myclass">Paragraph</p>
  <div id="target"></div>
</body>
</html>

我的问题是:有更好的方法吗?

解决方法

你可以为所有的运行相同的回调,但只有执行if子句,如果目前没有动画,像这样:
$(".myclass").fadeOut("slow",function() {
    if ($(".myclass:animated").length === 0)
      $("#target").append("<p>All done.</p>");
  });

这只是检查是否仍有动画通过:animated selector
如果你动画了很多不同的东西,然后使用相同的概念,只需像这样添加到选择器:

$(".myclass:animated,.myClass2:animated")

如果你在很多地方使用它,我会让回调一个onFinish函数或者整理它。

原文地址:https://www.jb51.cc/jquery/184027.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐