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

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

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

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

我是这样想的:

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

【问题讨论】:

标签: javascript jquery animation


【解决方案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...
      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多