3

我写了一个改变 div 的 css 定位的函数

我已经成功地使用 setTimeout 以特定的时间间隔调用该函数

现在我要做的是在同一页面上的 28 个不同的 div 上调用该函数,每个 div 都有自己的速度。

我的想法是我可以用这样的 for 循环来做到这一点:

for (var x = 0; x < 28; x++)
   { setInterval(function(){changeDirection(divlist[x])}, divs[divlist[x]].speed);}

使用存储速度和 ID 的对象“divs”

我能让他们全部反对计时器的唯一方法就是像这样调用 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

4

3 回答 3

4

您需要“锚定”循环迭代器的值,否则它会不断增加,并且所有间隔都会影响不存在的第 29 个间隔。

for(var x=0; x<28; x++) {
    (function(x) {
        // code goes here
    })(x);
}

但是,一页上有 28 个计时器是一个非常糟糕的主意。考虑重写您的代码,以便您只有一个间隔来根据速度值计算新位置。

于 2012-04-04T22:27:15.630 回答
1

我对这些自调用函数的方法。

var i = -1;
(function cssPositioning() {
  i++;
  if ( i < 28 ) {
            changeDirection(divlist[i]);
    setInterval(cssPositioning, divs[divlist[i]].speed);
  }
})();
于 2012-04-04T22:35:02.093 回答
1

根据@Kolink 的解释,你可以试试

for (var x = 0; x < 28; x++){ 
   setInterval(function(){
     var local = x;  //anchor the variable  
     changeDirection(divlist[local])}, divs[divlist[local]].speed);
   });
}

希望这可以帮助。

于 2012-04-04T22:55:00.717 回答