首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解$.promise是如何与transitionEnd相似的

理解$.promise是如何与transitionEnd相似的
EN

Stack Overflow用户
提问于 2015-07-08 08:43:27
回答 2查看 195关注 0票数 3

我只是在jQuery.promise()的文档页面上乱搞,发现了下面的代码:

代码语言:javascript
复制
$("button").on("click", function () {
    $("p").append("Started...");

    $("div").each(function (i) {
        $(this).fadeIn().fadeOut(1000 * (i + 1));
    });

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

小提琴在这里

现在我确实理解了$.defer在jQuery中帮助异步编程,我也理解$.done和$.fail是$promise对象的一部分。

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

然而,在我提供的小提琴示例中,我无法理解$.promise如何理解转换已经完成这一事实。承诺是如何发现fadeout()已经完成的?

下面的代码到底是如何工作的?

代码语言:javascript
复制
$("div").promise().done(function () {
            $("p").append(" Finished! ");
        }); 

承诺在这里是如何运作的?有人能解释吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-08 09:08:20

简单地说,jQuery在$("div")选择器返回的每个对象上创建了一个延迟对象队列(使用.data()函数可以看到这些对象)。

当您向带有jQuery函数(如fadeIn()fadeOut() )的div添加一些CSS动画时,它会创建附加到每个div队列的延迟对象。在父集合上使用$("div").promise().done()可以检查所有延迟对象队列是否为空(jQuery将迭代子元素)。

票数 2
EN

Stack Overflow用户

发布于 2015-07-08 09:38:02

我还没有钻研jQuery源代码,但我的理解是这样的。

$.promise返回一个承诺,一旦某个类型的所有操作都结束,它就会完成。默认情况下,'type‘是fx (来源)。当fx队列为空时,承诺将解析。

在您的小提琴中,您调用fadeIn(),它将动画添加到fx队列中。(默认情况下$.fadeIn()queue: true。) $.fadeOut也是这样做的。

当队列为空时,承诺将解析。这把小提琴会支持这一点。(动画运行时,队列为“inprogress”,但在100 is之后为空。) 稍微复杂一些的小提琴 --注意当我们使用$(el).queue('fx',[]);清除fx队列时,承诺是如何完成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31287650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档