【问题标题】:jquery - increase timeout interval with each iteration of .each()jquery - 每次迭代.each()增加超时间隔
【发布时间】:2016-07-13 17:28:20
【问题描述】:

我想在元素列表上触发动画,并让每次迭代的延迟增加一点。我有我到目前为止所做的:

JS Fiddle

var timer = 1000;

$('div').each(function(){
        setTimeout(function(){
            $('div').animate({
                width:200,
                height:200,
                opacity:1
            }, 1000);
        }, timer);
        timer += 1000;
});

没有任何错误,它在技术上有效,但它们都同时动画。我知道它与similar code 非常相似(实际上相同),但由于某种原因它不起作用。我错过了什么?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    你可以使用 index 参数来增加动画。

    此外,您的目标是所有循环内的元素,请改用第二个参数,即当前迭代的元素

    $('div').each(function(i, elem){
        setTimeout(function(){
            $(elem).animate({
                    width:200,
                    height:200,
                    opacity:1
            }, 1000);
        }, 1000 * i);
    });
    

    FIDDLE

    jQuery 还有一个delay() 方法可以用于动画

    $('div').each(function(i, elem){
        $(elem).delay(i * 1000).animate({
            width   : 200,
            height  : 200,
            opacity : 1
        }, 1000);
    });
    div {
      width:0;
      height:0;
      opacity:0;
      display:block;
      margin:0 auto;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div style="background:#f00;"></div>
    <div style="background:#000;"></div>
    <div style="background:#ccc;"></div>

    【讨论】:

    • 效果很好,非常感谢。也非常有用的信息。我曾一度尝试使用delay(),但没有将其添加到正确的位置。
    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2010-12-14
    • 2012-10-17
    相关资源
    最近更新 更多