【问题标题】:jQuery animate gets resolved immediatelyjQuery animate 立即得到解决
【发布时间】:2014-08-06 14:09:05
【问题描述】:

我在 jQuery 中有几个动画,并希望在它们都完成后运行函数。我创建了承诺对象并将其放入“承诺桶”中。不幸的是,我的动画马上就解决了。代码中是否缺少某些内容?我在 5 秒之前将消息打印到控制台。

CoffeeScript 中的代码

animBucket = []
animBucket.push $('#a').animate({opacity: 0.5}, 5000).promise()
animBucket.push $('#b').animate({opacity: 0.5}, 5000).promise()
$.when animBucket
  .then () ->
    console.log 'All animation done'

【问题讨论】:

    标签: jquery coffeescript promise


    【解决方案1】:

    在数组上使用$.when 时需要.apply

    $.when.apply null, animBucket
        .then () ->
            console.log "all done"
    

    否则,$.when 会将数组视为单个解析值。调用 .apply 会将输入从数组转换为可变参数。

    【讨论】:

    • 在不相关的笔记上,通过电话发布答案非常痛苦 :) 我希望我有所帮助。
    • 如果你想要和$.when()一样的效果,$.when.apply null, animBucket不应该是$.when.apply $, animBucket吗?我知道你在这里通过null 侥幸逃脱(它碰巧有效),但这只是因为实现选择不使用this,这不是你可以指望的东西。
    • $ 在 jQuery 中用作命名空间,所以我发现 null 更简洁。但是就像你说的那样,两者都有效
    • 嗯,你觉得null$ 更简洁?而且,仅仅因为它是一个命名空间并不意味着它上面的方法不能引用this。这是实现者的选择,因为 jQuery 命名空间可以更改其名称,甚至可能有使用 this 的原因。
    • @jfriend00 词法输入不能像这样工作 :) (即使命名空间改变了,组件内部使用的名称也会被封闭)。为了解决您的问题 - 特别是 jQuery 库保证 $ 下的所有内容都不会使用 this at all$.fn 下的任何内容@ this。其他库在这方面可能会有所不同,因此您注意到这一点很好。
    猜你喜欢
    • 2018-11-17
    • 2015-02-10
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多