for循环的setInterval?

时间:2011-05-17 08:09:53

标签: javascript jquery

for (var i=list.length; i>=0; i--){
    //do something....                      
}

我想使用setInterval使这个过程花费1整分钟,无论列表中有多少项。因此,如果有10个项目,它将每6秒,30个项目,每两秒钟等触发一次。

感谢您的帮助!

4 个答案:

答案 0 :(得分:6)

可以这样做:

var list = [1,2,3,4,5,6,7,8,9,10];
var timeFrame = 60000;
var interval = timeFrame / (list.length-1);
var i = 0;

(function iterate () {
    if (list.length > i) {
        console.log(list[i]);
        i++;
    }
    setTimeout(iterate, interval);
})();

JsFiddle Demo

我不确定这是否是您正在寻找的内容,但是这将在给定的时间范围内“迭代”遍历列表中的所有项目,而不使用for循环。该函数将始终使用setTimeout“自行调用”。超时根据项目数在开头计算。

此解决方案比setInterval更“可信”。下一个超时将在上一个操作完成后设置,因此不会叠加。

答案 1 :(得分:1)

var totalItem = list.length;
setInterval(function(){ alert('');}, 60000/totalItem);

答案 2 :(得分:-1)

你要做

function code(i) {
    return function() { alert(i); };
}

var period = 60 * 1000 / (list.length - 1);
for (var i=list.length; i>=1; i--){ 
    setTimeout(code(list[i - 1]), period * (i - 1));
}

答案 3 :(得分:-2)

尝试以下内容:

var interval = 2;
for (var i=list.length; i>=0; i--){
    setTimeout(your_code_here(), i*interval);
}