首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javascript for循环中的每一次迭代后延迟?

如何在javascript for循环中的每一次迭代后延迟?
EN

Stack Overflow用户
提问于 2013-01-20 22:30:00
回答 2查看 4K关注 0票数 0

可能重复: 如何在JavaScript循环中添加延迟?

在javascript for循环中的每一次迭代(或之前)完成之后,如何延迟呢?这是我的代码,但我需要让它‘睡眠’6秒,一旦它设置了颜色,然后再转到列表中的下一个。

代码语言:javascript
复制
for (i = 0; i < switchers.length; i++) {
    $('#switchers ol li:nth-child(' + (i+1) + ')').css('color', 'green');
}

我曾经尝试过嵌套一个setTimeout,但这是行不通的,在搜索完谷歌之后,我决定在这里问一问。

EN

回答 2

Stack Overflow用户

发布于 2013-01-20 22:42:06

您可以创建一个泛型函数,它允许您使用超时间隔循环。您通常在"for“循环中拥有的代码将进入作为最后一个参数传入的函数中。

如下所示:

代码语言:javascript
复制
var loopTimeout = function(i, max, interval, func) {
    if (i >= max) {
        return;
    }

    // Call the function
    func(i);

    i++;

    // "loop"
    setTimeout(function() {
        loopTimeout(i, max, interval, func);
    }, interval);
}
  • i:递增变量
  • max:循环多少次
  • interval :ms中的超时间隔
  • func:用于执行每次迭代的函数("i“作为唯一的参数传递)

示例用法:

代码语言:javascript
复制
loopTimeout(0, switchers.length, 6000, function(i){
    $('#switchers ol li:nth-child(' + (i+1) + ')').css('color', 'green');    
});
票数 2
EN

Stack Overflow用户

发布于 2013-01-20 22:34:39

您可以使用.each()

代码语言:javascript
复制
// timeout, in milliseconds to delay each iteration
var actionTimeout = 6000;

$('#switchers ol li').each(function(i, li) {
    setTimeout(function() {
        $(li).css('color', 'green');
    }, i * actionTimeout);
});

JSFiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14430060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档