Javascript 如何让脚本等待jQuery动画完成?

Javascript 如何让脚本等待jQuery动画完成?,javascript,jquery,animation,jquery-animate,Javascript,Jquery,Animation,Jquery Animate,我有一个名为runUpdates的函数,我将JSON对象数组传递给它。此函数查看对象,并使用if语句来决定它是哪种更新以及处理该更新时应采取的方向。在某些情况下,更新会绑定动画。我想使用jQuery的animate来设置这些动画,但我希望它在进入下一步之前等待动画完成 我的程序看起来像这样- runUpdates(updates) { for(i = 0; i < updates.length; i++) { update = updates[i];

我有一个名为runUpdates的函数,我将JSON对象数组传递给它。此函数查看对象,并使用if语句来决定它是哪种更新以及处理该更新时应采取的方向。在某些情况下,更新会绑定动画。我想使用jQuery的animate来设置这些动画,但我希望它在进入下一步之前等待动画完成

我的程序看起来像这样-

runUpdates(updates) {
    for(i = 0; i < updates.length; i++) {
        update = updates[i];
        if(update.type = "blabla") {
            //do stuff
        } else {
            //do other stuff
            if(update.animations) {
                for(k = 0; k < animations.length; k++) {
                    //do jquery animate AND wait for animation to finish before proceeding
                }
            }
        }
    }
}
runUpdates(更新){
对于(i=0;i

但即使动画已经开始,脚本仍将继续运行。有没有一个简单的方法来解决这个问题,或者我需要用函数调用来重新创建循环?

你的问题不是很清楚你想要等待什么。我假设您希望在继续下一个动画之前等待每个动画完成

var pipe = $.Deferred().resolve();

for(var k = 0; k < animations.length; k++)
{
    pipe = pipe.pipe(function()
    {
        return $('element').animate({
            // animate whatever you want
        }, 300);
    });
}
…这是小提琴:


如果您对链接动画不感兴趣(希望它们异步执行),并且只希望在所有动画完成后运行一些代码,请使用以下方法:

var deferreds = [];

for(var k = 0; k < animations.length; k++)
{
    deferreds.push(
        $('element').animate({
            // animate whatever you want
        }, 300)
    );
}

$.when.apply($, deferreds).done(function()
{
    // Put your code here...
});
var递延=[];
对于(var k=0;k

…最后,这里是问题的症结所在:

你的问题不是很清楚你想等待什么。我假设您希望在继续下一个动画之前等待每个动画完成

var pipe = $.Deferred().resolve();

for(var k = 0; k < animations.length; k++)
{
    pipe = pipe.pipe(function()
    {
        return $('element').animate({
            // animate whatever you want
        }, 300);
    });
}
…这是小提琴:


如果您对链接动画不感兴趣(希望它们异步执行),并且只希望在所有动画完成后运行一些代码,请使用以下方法:

var deferreds = [];

for(var k = 0; k < animations.length; k++)
{
    deferreds.push(
        $('element').animate({
            // animate whatever you want
        }, 300)
    );
}

$.when.apply($, deferreds).done(function()
{
    // Put your code here...
});
var递延=[];
对于(var k=0;k

…最后,这里有一把小提琴:

首先,您可以使用jQuery的动画回调-


第二个是对象。

首先可以使用jQuery的动画回调-


第二个是对象。

动画是否有动画结束事件?我怀疑您必须重新构造循环以使用函数调用。jQuery的
.animate()
有一个完整的回调函数,可以用来启动流程的下一步。看起来像这样-为什么不给我们看一些真实的代码?!动画是否有动画结束事件?我怀疑您必须重新构造循环以使用函数调用。jQuery的
.animate()
有一个完整的回调函数,可以用来启动流程的下一步。看起来像这样-为什么不给我们看一些真实的代码?!与使用
管道链接所有动画承诺不同,更自然的方法是使用
jQuery等待多个承诺。当
@Ates Goral-您可以编辑我的小提琴并在此处发布链接吗?我不确定我在跟踪你。当
时,你将如何用
实现这一点?与其用
管道
链接所有动画承诺,更自然的方法是用
jQuery等待多个承诺。当
@Ates Goral-你能编辑我的小提琴并在这里发布链接吗?我不确定我在跟踪你。当
时,您将如何使用
实现这一点?