【问题标题】:Jquery Queue() Each() with Delay()Jquery Queue() Each() 和 Delay()
【发布时间】:2011-06-08 15:10:41
【问题描述】:

我有一个数组:result[i]。我想遍历数组中的每个字段并将其附加到我页面中的元素。

$("tr:first").after(result[i]);

但我希望延迟发生。

一直在尝试了解队列如何与每个循环和延迟一起工作,但我似乎无法解决。我可以延迟,但只能在它们全部附加之前。

提前致谢。

【问题讨论】:

    标签: javascript jquery arrays loops


    【解决方案1】:

    试试queue

    $.each(result, function(idx, val) {
        $("tr:first").delay(1000).queue(function(next) {
            $(this).after(val);
            next();
        });
    });
    

    为了完整起见,这是针对 jQuery 1.4 的。在早期版本中,回调应如下所示:

    function() {
        // do whatever here
        $(this).dequeue();
    }
    

    【讨论】:

    • 它需要 $(this)。在之后工作之前,但它只附加了第一个。
    • @jackreichert:是的,我修好了。现在应该可以工作了(假设你使用 jQuery 1.4)。
    • 甜蜜。这不应该是function(next) { after(val); next(); } 吗?
    • 完美,进入下一个挑战 =) 随机延迟。但我很确定 Math.random 会为我做到这一点。感谢您的帮助!
    • @Victor Nicollet:嗯,你指的是实际版本吗?我已经修复了next 的东西。或者你是什么意思?
    【解决方案2】:

    看,递归的威力:

    (function append(i) {
      if (i >= result.length) return;
      $('tr:first').after(result[i]);
      setTimeout(function(){append(i+1)},1000);
    })(0);
    

    您可以添加额外的 setTimeout,具体取决于您是需要立即出现还是延迟后出现第一项。

    【讨论】:

    • 它定义了一个名为 append 的匿名(是的,愚蠢的名字)函数,并使用 0 的参数立即调用它。函数周围的 () 是为了确保它是一个匿名函数 - 否则,解析器可能会将其误认为是函数定义。
    【解决方案3】:
    $(result).each(function(i) {
        $("tr:first").delay(1000).after(result[i]);
    });
    

    【讨论】:

    • 这将在 t=1000 处附加 所有 个结果,而不是在 t=1000 处附加结果一,在 t=2000 处附加结果二,在 t=3000 处附加结果三等等.
    • 取决于你如何看待问题
    • 实际上,“我可以延迟,但只能在它们全部附加之前。” 消除了您的解释。更努力地看。 ;-)
    【解决方案4】:

    处理此问题的另一种方法是循环遍历结果数组并设置一组 setInterval 或 .delay() 函数调用,延迟根据数组索引而变化。例如:

    for( var i = 0; i < result.length; i++ ){
      $('tr:first').delay(i*1000).after(result[i]);
    }
    

    可以肯定的是,这不像上面@Victor 提供的递归解决方案那么好,但这是另一种方法,以防您出于任何原因不喜欢递归。 p>

    【讨论】:

    • 小心点。由于i 的作用域规则,使用$.each() 比for 循环更安全
    • 抱歉,以前从未使用过$.each() 来进行数组跨越,所以我不会想立即写出使用它的代码。 =)
    猜你喜欢
    • 2011-07-26
    • 2011-12-13
    • 2011-07-20
    • 1970-01-01
    • 2012-04-10
    • 2012-02-15
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多