3

div の css 位置を変更する関数を作成しました

setTimeout を使用して、特定の間隔で関数を呼び出すことに成功しました

今私がやろうとしているのは、同じページの 28 の異なる 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 を呼び出す方法はありますか

4

3 に答える 3

4

ループ反復子の値を「固定」する必要があります。そうしないと、値が増加し続け、すべての間隔が存在しない 29 番目の間隔に影響します。

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

ただし、1 ページに 28 個のタイマーを配置するのは、非常に悪い考えです。速度値に基づいて新しい位置を計算する間隔が 1 つだけになるように、コードを書き直すことを検討してください。

于 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 に答える