jQuery,在多个动画之后只调用一次回调
假设我有几个动画同时运行,我想在完成所有这些动作后调用它。
只有一个动画,很容易; 有一个回调。 例如 :
$(".myclass").fadeOut(slow,mycallback);
麻烦的是,如果我的选择器找到了几个项目,那么将为每个项目调用回调。
解决方法并不太难; 例如 :
Example $(document).ready(function() { var $mc=$(".myclass"),l=$mc.length; $mc.fadeOut("slow",function(){ if (! --l) $("#target").append("All done.
"); }); }); Paragraph
Paragraph
Paragraph
Paragraph
Paragraph
Paragraph
我的问题是:有更好的方法吗?
您可以为所有这些回调运行相同的回调,但是如果当前没有动画,则只执行if
子句,如下所示:
$(".myclass").fadeOut("slow", function() { if ($(".myclass:animated").length === 0) $("#target").append("All done.
"); });
这只是通过:animated
选择器检查是否还有:animated
。 如果你动画很多不同的东西然后使用相同的概念,只需添加到选择器,如下所示:
$(".myclass:animated, .myClass2:animated")
如果你在很多地方使用它,我会把这个回调变成onFinish
函数或者整理它的东西。
看一下这个post的讨论: jQuery $ .animate()多个元素但只有一次fire callback
.when()/.then()
和.promise().done(callback());
函数为在所有动画结束时调用单个calllback的问题提供了更优雅的解决方案。
在我的情况下,我必须定义
if ($(".myclass:animated").length === 1)