使用for循环调用setTimeout
calling setTimeout with a for loop
我编写了一个函数,它可以更改div 的css位置
我已经成功地使用setTimeout在特定的时间间隔调用函数
现在,我要做的是在同一页上的28个不同div上调用该函数,每个div都有自己的速度。
我的想法是,我可以用一个像这样的for循环来做这件事:
for (var x = 0; x < 28; x++)
{ setInterval(function(){changeDirection(divlist[x])}, divs[divlist[x]].speed);}
使用存储速度和id的对象"div"
我唯一能让他们都逆着计时器移动的方法就是调用setInterval 28次,就像这样…
setInterval(function(){changeDirection(divlist[1])}, divs[divlist[1]].speed);
setInterval(function(){changeDirection(divlist[2])}, divs[divlist[2]].speed);
setInterval(function(){changeDirection(divlist[3])}, divs[divlist[3]].speed);
setInterval(function(){changeDirection(divlist[4])}, divs[divlist[4]].speed);....etc
for循环不起作用。。。
有人知道为什么吗?有没有一种方法可以用类似的循环在许多不同的函数上调用setInterval
您需要"锚定"循环迭代器的值,否则它会不断递增,所有的间隔都会影响第29个,而第29个间隔并不存在。
for(var x=0; x<28; x++) {
(function(x) {
// code goes here
})(x);
}
然而,在一个页面上显示28个计时器是一个非常糟糕的主意。考虑重写代码,这样您就只有一个基于速度值计算新位置的间隔。
我对这些自调用函数的方法。
var i = -1;
(function cssPositioning() {
i++;
if ( i < 28 ) {
changeDirection(divlist[i]);
setInterval(cssPositioning, divs[divlist[i]].speed);
}
})();
根据@Kolink的解释,您可以尝试
for (var x = 0; x < 28; x++){
setInterval(function(){
var local = x; //anchor the variable
changeDirection(divlist[local])}, divs[divlist[local]].speed);
});
}
希望这能有所帮助。
相关文章:
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 在setTimeout中调用相同的函数
- 为什么setTimeout适用于无休止的递归调用
- settimeout调用的函数未结束
- 调用setTimeout内部的函数时发生引用错误
- setTimeout调用自身的任何问题
- 如何将参数传递给使用 setTimeout 调用的函数
- 使用 setTimeout 调用一次 forEach 的回调函数即可完成
- 从setTimeout调用window.event时失败
- 函数(从setTimeout调用)未返回值
- 与连续的setTimeout调用相比,setInterval更有可能按时发生
- setTimeout调用的顺序
- 在setTimeout调用期间超过的最大调用堆栈大小
- 使用setTimeout调用函数,并提供可选的停止方式
- 无用的setTimeout调用(参数周围缺少引号?)
- 为什么这个setTimeout()调用在控制台中工作,而不是作为一个油脂猴子脚本
- 为什么通过setTimeout调用原型函数时会丢失实例信息?
- 如何从匿名函数中对同一函数进行 setTimeout 调用
- 错误:无用的setTimeout调用(参数周围缺少引号?)
- 如何在 setTimeout 调用中解决超出范围的 Var