在设置两个对象的动画时只触发一次回调
Fire a callback only once on animating two objects
我开始用jQuery制作一个相当复杂的动画,我正在寻找一种将元素一起制作动画的特定方法。我写的代码如下,可以用来将多个元素动画化:
小提琴在这儿:http://jsfiddle.net/wkhrU/
$(document).ready(function(){
$('#firstElement, #secondElement').animate(
{left : '+=400px'},
500,
"linear",
function(){
alert("completed");
});
});
但是,回调函数会触发两次,即每次都为内部元素触发。我想要的是在相同的持续时间内同时为多个元素设置动画,完成后,发出一个调用,我想在其中交换元素的id
属性。我不能在这里做同样的事情,因为在完成回调时,它会交换id
s一次,在下一个函数回调时,会再次交换它们。实现这一目标的适当方式是什么?
解决方案
您可以使用promise()
来调用要执行的函数,而不是animate
的内置回调。这样可以确保done
中的函数在为两个元素设置动画后仅调用这基本上就像你在问#firstElement
&#secondElement
向JS承诺,当这两个'em都完成时,它会通知,以便您可以将done
处理程序附加到它。
$(document).ready(function () {
$('#firstElement, #secondElement').animate({
left: '+=400px'
},
500, "linear").promise().done(function () {
alert("completed");
});
});
演示
http://jsfiddle.net/hungerpain/wkhrU/1/
有关使用方法的更多信息:
promise
- 文档:http://api.jquery.com/promise/
- 它的作用:确保绑定到集合的特定类型的所有操作(无论是否排队)都已完成
done
- 文档:http://api.jquery.com/deferred.done/
- 它的作用:添加在promise被解析时要调用的处理程序
相关文章:
- $watch回调每次在浏览器中触发,但在测试期间只触发一次
- 流星回拨天堂回拨一次又一次
- 如何在jQuery中只对多个事件触发一次回调
- 正则表达式回调函数只执行一次
- 回调函数不会在使用 $timeout 的服务中只调用一次
- 如何确保回调只添加一次
- 使用 setTimeout 调用一次 forEach 的回调函数即可完成
- 为什么 setInterval 回调只执行一次
- 一个函数,它接受回调并创建只能调用一次的新版本的回调.Javascript
- 防止ajax回调settimeout每次单击执行一次以上
- 回调-第二次回调后出错
- 如何知道回调循环的哪一次迭代以及何时执行
- 为什么$watchGroup称之为's回调两次
- Javascript:非阻塞回调(另一次)
- 角度jsonp回调只执行一次
- 在设置两个对象的动画时只触发一次回调
- 如何在一次AJAX调用后避免回调地狱
- jQuery动画在运行时触发回调两次
- jQuery动画触发.complete回调5次
- 执行jquery $.when()的done回调一次(在backbone-js应用中)