如何在每次通过 for 循环时增加动画延迟

Posted

技术标签:

【中文标题】如何在每次通过 for 循环时增加动画延迟【英文标题】:How to increase the delay on animation on every pass of a for loop 【发布时间】:2013-02-03 11:13:33 【问题描述】:

首先,我创建了一个基本演示,说明我目前所拥有的 here。

其次,这是我正在使用的 javascript

var boxes = ["#one","#two","#three","#four"];

boxhover = function(a)
    $("#hover").hover(
        function()
            $(a).stop(true).delay(250).animate(opacity:1);
        ,
        function()
            $(a).stop(true).delay(250).animate(opacity:0);
        
    )


for(var i=0; i<boxes.length; i++)

    boxhover(boxes[i])

我希望实现的是让每个框一个接一个地悬停,延迟时间为 250。我尝试向动画功能添加延迟(如上所示)以及 setTimeout在 for 循环中,但没有运气。任何帮助都会很棒。

【问题讨论】:

【参考方案1】:

您可以将数组索引作为附加参数传递给boxhover 函数,然后对延迟因子执行乘法运算。

var boxes = ["#one","#two","#three","#four"];

boxhover = function(a, i)
    $("#hover").hover(
        function()
            $(a).stop(true).delay(250 * i).animate(opacity:1);
        ,
        function()
            $(a).stop(true).delay(250 * i).animate(opacity:0);
        
    )


for(var i=0; i<boxes.length; i++)

    boxhover(boxes[i], i)

jsfiddle

替代解决方案:

为避免在#hover 上绑定多个悬停事件处理程序并不得不维护一组 ID,您可以执行以下操作:

$("#hover").on(
    'mouseenter': function(e) 
        // Animate the box set to visible
        animateBoxSet(1);
    ,
    'mouseleave': function(e) 
        // Animate the box set to invisible
        animateBoxSet(0);
    
);

function animateBoxSet(opacity) 
    // For each box
    $('.box').each(function (index, element) 
        // Set the delay based on the index in the set
        var delay = 250 * index;
        // Animate it the visibility after the delay
        $(element).stop(true).delay(delay).animate(
            'opacity': opacity
        );
    );

jsfiddle

【讨论】:

@user1846307 如果您有兴趣,我还添加了替代解决方案。 感谢您提供额外信息,不幸的是,这些盒子只是我现场问题中的一个演示,我需要使用一个数组。但我之前没有见过 on() 函数,所以我会考虑在未来使用它。再次感谢。

以上是关于如何在每次通过 for 循环时增加动画延迟的主要内容,如果未能解决你的问题,请参考以下文章

JS中如何解决for循环中的延迟执行问题

如何创建一个循环来检查每次迭代时是不是有新的 IBAction 输入?

Swift:for循环中延迟的动画不起作用?

如何实现并行,以这样的方式延迟,当输出低于阈值时并行化 for 循环停止?

如何计算动画 gif 循环的次数并在 javascript 中显示该计数?

内存增加每次核心数据迭代