如何实现 jQuery 动画排队? [复制]

Posted

技术标签:

【中文标题】如何实现 jQuery 动画排队? [复制]【英文标题】:How can I achieve jQuery animation queuing? [duplicate] 【发布时间】:2011-01-18 00:01:51 【问题描述】:

可能重复:jquery finish one animation then start the other one

我有一组通过 ajax 加载的 div(我们说的是 6 个 div,代表 6 个产品)。

我想要完成的是一个渐进式动画,比如每个 div 的 jquery.fadeIn(),在前一个 div 的动画完成之后。这样做的最佳方法是什么?

我是这样想的:

    我通过 ajax 获得了新的 html 元素 - 完成 我迭代它们 - 我可以将它们作为隐藏插入然后迭代它们 对于每一个,我用一个 fadeIn() 显示它,当动画完成时,我显示下一个 - 对于每个我执行fadeIn 并以某种方式回调到下一个...

【问题讨论】:

这个问题经常被问到,而且有很多潜在的解决方案。请参阅:***.com/questions/461912/… 和 ***.com/questions/505434/… 和 ***.com/questions/1594077/… 嗯,是的,但是解决方案更好,是jquery插件的形式。 这意味着现有问题的读者现在将被剥夺 jquery 插件解决方案,因为它被发布在此处而不是现有问题上。 【参考方案1】:

您可以构建自己的小插件,对元素进行递归调用,以按顺序淡入。这样的事情应该可以工作:

$.fn.queuedFadeIn = function(speed) 
    var elem = $(this);
    if(elem.length > 0) 
        elem.eq(0).fadeIn(speed, function() 
            elem.slice(1).queuedFadeIn(speed);
        );
    


$('.div_selector').queuedFadeIn(1000);

这应该使它们一个接一个地淡化。为了让事情更清楚,这里在伪代码中也是如此:

# If there are elements in the selection:
    # Find the first element in selection, fade it in
       # After fade in, call itself, discarding the first element

【讨论】:

效果很好,又添加了一行,这样我会在动画结束后显示我的分页,这样看起来就不会奇怪了。谢谢【参考方案2】:

animate 函数中有一个回调,旨在在代码完成后运行。

【讨论】:

【参考方案3】:

大部分 jQuery 效果都支持回调函数。所以你所概述的应该有效。

http://api.jquery.com/fadeIn/

【讨论】:

【参考方案4】:

这是另一种方法。有点奇怪,但它确实有效。

var callbacks = [];

$.each(["f", "e", "d", "c", "b", "a"], function(index, id) 
    callbacks[index] = function() 
        $("#" + id).fadeIn(callbacks[index - 1]);
    ;
);

callbacks[5]();

【讨论】:

那里有新的思维方式。您最好通过一组元素直接使用each() 并直接使用该对象,而不是使用字符串值作为 ID。这样它可能更具可读性,并且不需要命名元素#a#b#c...

以上是关于如何实现 jQuery 动画排队? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

前端知识点总结——jQuery(下)

jQuery排队动画序列有延迟;需要重复

jQuery动画延迟问题与自排队循环的步骤

带有函数的Jquery动画不会排队:false

jquery中动画效果的函数

10.jQuery之停止动画排队stop方法(重点)