【发布时间】:2015-09-26 01:37:03
【问题描述】:
我只是在jQuery.promise() 的文档页面上乱七八糟,遇到了以下代码:
$("button").on("click", function () {
$("p").append("Started...");
$("div").each(function (i) {
$(this).fadeIn().fadeOut(1000 * (i + 1));
});
$("div").promise().done(function () {
$("p").append(" Finished! ");
});
});
现在我明白 jQuery 中的 $.defer 有助于异步编程,我也明白 $.done 和 $.fail 是 $promise 对象的一部分。
我读过一篇有趣的文章HERE。有几个很好的例子说明如何使用 $.defer 来监控 css-3 转换。
但是,在我提供的小提琴示例中,我无法理解 $.promise 如何获取转换完成的事实。 Promise 是如何发现淡出()已经完成的?
下面的代码是如何真正工作的?
$("div").promise().done(function () {
$("p").append(" Finished! ");
});
promise 是如何在这里真正发挥作用的?谁能解释一下?
【问题讨论】:
-
因为集合 (
$('div')) 中匹配元素上的所有动画默认都放在fx队列中,为每个动画使用一个延迟对象,该对象在动画完成时解析。一旦队列为空,并且 queueHooks 中的所有延迟对象都被解析,promisedone()回调就会被触发。 -
我添加了
promise标签(还有动画,但是......)因为我猜有一些承诺的专家可以更好地解释它 -
@A.Wolff 没有问题!谢谢:)
-
附带说明,这将是顺序处理动画的更好方法:jsfiddle.net/xn9xzyx6 请参阅stackoverflow.com/a/27660144/1414562
标签: javascript jquery animation promise