javascript - 了解 $.promise 的工作方式类似于 transitionEnd

标签 javascript jquery animation promise

我只是在 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! ");
    }); 
});

FIDDLE HERE

现在我明白 jQuery 中的 $.defer 有助于异步编程,我也明白 $.done 和 $.fail 是 $promise 对象的一部分。

我读了一篇有趣的文章 HERE 。有几个很好的例子可以说明如何使用 $.defer 来监控 css-3 转换。

但是在我提供的 fiddle 示例中,我无法理解 $.promise 如何获取转换已完成的事实。 promise 如何判断 fadeout() 已完成?

下面这段代码是如何工作的?

$("div").promise().done(function () {
            $("p").append(" Finished! ");
        }); 

promise 在这里如何运作?谁能解释一下?

最佳答案

简而言之,jQuery 在 $("div") 返回的每个对象上创建一个 Deferred 对象队列。选择器(使用 .data() 函数可见)。
当您使用 jQuery 函数向 div 添加一些 CSS 动画时,例如 fadeIn()fadeOut() ,它创建附加到每个单独的 div 队列的延迟对象。 使用 $("div").promise().done()在父集合上允许检查所有子延迟对象队列是否为空(jQuery 将迭代子元素)。

关于javascript - 了解 $.promise 的工作方式类似于 transitionEnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31287650/

相关文章:

javascript - 如何在滚动时实现图像淡入效果(如 mashable.com)

javascript - 调整窗口大小时限制居中div的水平范围

javascript - 如何从 struts 2 中的 java 脚本重定向到 struts 操作?

javascript - EcmaScript 语法

jquery - 搬出后翻转和图像更改 false

jquery - mouseenter 和 mouseleave 事件不适用于混合图像

javascript - 使用 php、javascript 和 json 添加 map 标记

javascript - 在模块中查找函数

ios - 具有自动布局挑战的核心动画(尺寸变化)

Windows Vista 和 7 运动效果仅在显示我的表单时应用一次。为什么?