for (var i=list.length; i>=0; i--){
//do something....
}
我想使用setInterval使这个过程花费1分钟,无论列表中有多少项目。因此,如果有10个项目,它会触发每6秒,30项,每两秒等。set循环for循环?
感谢您的任何帮助!
for (var i=list.length; i>=0; i--){
//do something....
}
我想使用setInterval使这个过程花费1分钟,无论列表中有多少项目。因此,如果有10个项目,它会触发每6秒,30项,每两秒等。set循环for循环?
感谢您的任何帮助!
像这样的事情可以做:
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);
})();
我不是当然如果是这样的话您要查找的内容,但是在给定的时间范围内,这将“遍历”列表中的所有项目,而不使用for
循环。该功能将始终使用setTimeout
“自称”。超时是根据项目的数量在开始时计算的。
该解决方案比setInterval
更“可信”。当前一个动作已经完成时,下一个超时将被设置,所以它不会叠加。
你会做
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));
}
'setInterval'的第一个参数应该是函数,第二个延迟。 – Lekensteyn 2011-05-17 08:17:29
对不起,现在难以置信的模糊的心态 – Novikov 2011-05-17 08:23:04
将毫不拖延地执行该功能。参见[jsFiddle](http://jsfiddle.net/RFw8A/)。 'setTimeout'或者需要一个函数或者一个字符串(不建议使用,它就像'eval')作为第一个参数。您正在调用函数而不是将函数作为参数,所以除非'code()'返回一个函数,否则这将不起作用。 – kapa 2011-05-17 08:45:48
尝试类似如下:
var interval = 2;
for (var i=list.length; i>=0; i--){
setTimeout(your_code_here(), i*interval);
}
这是行不通的,因为您立即执行该功能。从your_code_here中删除(),同时在x * 2毫秒内执行此操作。 – mplungjan 2011-05-17 08:41:14
@ i100发表评论:我不认为这会起作用:var interval = 2; for(var i = list.length; i> = 0; i - ){setTimeout(your_code_here(),i * interval); }当“your_code_here()”正在等待执行时,循环仍在继续。 和循环将在一个非常短的时间内完成(可能是1ms或更短,取决于你的cpu)... – Yuankun 2011-05-17 09:12:26
你可以给你一些背景信息,你想要完成什么?要花一分钟时间,这完全取决于你在每次迭代中做什么,以及单次迭代需要多长时间,并且可能很难实现。 – Gerry 2011-05-17 08:15:21
另外,请确保您不要将任何关键任务代码放在上面,也不要以为它会一直按照您的计划开火。我不确定它是否已在Chrome中实现,但浏览器可以在页面位于后台选项卡时优化资源使用情况,并可能最终以更大的时间间隔呼叫您的定时器。 – DarthJDG 2011-05-17 08:32:26