javascript - 除非前一个完成,否则如何使动画不触发(不使用回调)

标签 javascript jquery

我有一个名为:

的函数
this.makeStuffHappen() 

它根据 switch 语句和几个变量制作不同的动画。除非所有先前的问题都已解决,否则是否可以使函数不触发。

我想写一些类似的东西

$('button').click(function(){
    a.makeStuffHappen();
    b.makeStuffHappen();
    c.makeStuffHappen();
    d.makeStuffHappen();
});

然后它应该只在a完成后运行b,b完成后运行c,c完成后运行d。是否只能通过链接动画来等待前一个动画?是否可以链接任何功能?

编辑:makeStuffHappen() 正在为不同的元素设置动画,因此 a.makeStuffHappen() 将为与 b.makeStuffHappen 不同的元素设置动画,依此类推。

谢谢。

最佳答案

最简单(或至少最灵活)的方法是使用 deferred objects [docs] 。为此,您必须从每个函数返回一个延迟对象,例如:

a.makeStuffHappen = function() {
    elementA.animate(...);
    elementB.animate(...);
    ...


    return $.when(elementA, elementB,...);
};

b.makeStuffHappen等相同

$.when() [docs]返回一个延迟对象,您可以在其中附加回调,一旦传递给它的所有延迟对象都得到解析,就会执行该回调。

然后在您的事件处理程序中,您可以调用 .pipe() [docs]在这些延迟对象上,将它们链接在一起:

$('button').click(function(){
    a.makeStuffHappen()
       .pipe($.proxy(b.makeStuffHappen, b))
       .pipe($.proxy(c.makeStuffHappen, c))
       .then(function() {
           console.log('All done');
       });
});

DEMO

关于javascript - 除非前一个完成,否则如何使动画不触发(不使用回调),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304662/

相关文章:

javascript - 在 IE 11 中发送事件的正确方法

javascript - 引用错误 : Dispatch is not defined

javascript - 在鼠标点击的位置判断位置

javascript - 将附加内容插入欧芹错误

jquery - 具有全部播放功能的音频播放器

jQuery-validate 自定义规则导致其他无效字段被忽略

javascript - 获取 nodejs 函数定义

javascript - 如何从 for 循环创建数组并在稍后使用它

javascript - 单击时切换多个链接的按钮颜色

javascript - 使用谷歌图表API的可点击条形图标签