0

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

javascript for 循环中的每次迭代完成后(或之前)如何延迟?这是我的代码,但是一旦它设置颜色,我需要让它“休眠”6 秒,然后它才能移动到列表中的下一个。

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

我曾尝试嵌套一个 setTimeout,但没有成功,在谷歌搜索后,我决定在这里问它。

4

2 回答 2

2

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

像这样:

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 : 循环多少次
  • 间隔:超时间隔,以毫秒为单位
  • func : 执行每次迭代的函数(“i”作为唯一参数传递)

示例用法:

loopTimeout(0, switchers.length, 6000, function(i){
    $('#switchers ol li:nth-child(' + (i+1) + ')').css('color', 'green');    
});
于 2013-01-20T22:42:06.497 回答
1

您可以使用.each().

// 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

于 2013-01-20T22:34:39.477 回答