如何在没有堆叠回调的情况下在jQuery中动画?

前端之家收集整理的这篇文章主要介绍了如何在没有堆叠回调的情况下在jQuery中动画?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有三个div,我想让每个div都动画,一旦完成了。目前,我写道:
$('div1').fadeOut('slow',function() {
    $('div2').fadeOut('slow',function() {
        $('div3').fadeOut('slow');
    });
});

哪个是丑的,但可以管理。

现在想象我有10种不同的动画需要一个接一个地发生在不同的元素上。突然,代码变得如此笨重,很难管理…

这是我想要做的伪代码

$('div1').fadeOut('slow' { delay_next_function_until_done: true } );
$('div2').fadeOut('slow' { delay_next_function_until_done: true } );
$('div3').animate({ top: 500 },1000 );

我该如何实现?

解决方法

如果您使用最新版本的jQuery,请使用动画承诺:
$('div1').fadeOut('slow').promise().pipe(function() {
    return $('div2').fadeOut('slow');
}).pipe(function() {
    return $('div3').animate({ top: 500 },1000 );
});

你可以使它通用:

$.chain = function() {
    var promise = $.Deferred().resolve().promise();
    jQuery.each( arguments,function() {
        promise = promise.pipe( this );
    });
    return promise;
};

var animations = $.chain(function() {
    return $('div1').fadeOut('slow');
},function() {
    return $('div2').fadeOut('slow');
},function() {
    return $('div3').animate({ top: 500 },1000 );
});

$.when( animations ).done(function() {
    // ALL ANIMATIONS HAVE BEEN DONE IN SEQUENCE
});

还有很多功能关闭,但这是Javascript的本质。然而,使用Deferreds / Promises更加自然,更灵活,因为您避免回调“初始”。

原文链接:https://www.f2er.com/jquery/181708.html

猜你在找的jQuery相关文章