3

setInterval() が行われているのか、それとも強制終了されたのかを知るのに問題があります。間隔を作成して変数に保存しています:

interval = setInterval('rotate()',3000);

次に、要素をクリックすると、間隔を停止し、10 秒待ってから新しい間隔を開始します。変数間隔はグローバルです。

$(elm).click(function(){

  clearInterval(interval);
  position = index;

  $('#banner div').animate({
    'margin-left':position*(-img_width)
  });

  setTimeout('startItnerval()',10000);


});

function startItnerval(){

    interval = setInterval('rotate()',3000);

}

うまくいくようですが、最終的にはまだ間隔が残っていることに気付くことができます。新しい間隔を開始するたびに、グローバルな間隔変数に保存されるため、理論的には 100 間隔を開始してもすべて保存されます同じ変数が前の間隔を置き換えますよね? したがって、間隔のインスタンスは 1 つだけにする必要があります。次に、 clearInterval(interval);インスタンスを停止する必要があります。

結果を見ると、明らかに同じ変数に保存されている場合でも、それらはすべて別のインスタンスであり、個別に強制終了する必要があります。

実行されている間隔の数を追跡するにはどうすればよいですか? また、可能であれば、それらを 1 つずつ特定するにはどうすればよいですか? 問題を解決できたとしても、実行されている間隔の数をコンソールにカウントまたは表示する方法があるかどうかを本当に知りたいですか?

ありがとう

4

2 に答える 2

2

setInterval実際のオブジェクトではなくIDを返すため、行を繰り返しても間隔は上書きされません

var xy = setInterval(function() {...}, 1000);

間隔を停止したい場合は、それをクリアする必要があります:

clearInterval(xy);

またstartInterval、連続して複数回呼び出すことができるが、複数の間隔を作成したくない場合は、新しい間隔を開始する前に間隔をクリアしてください。

function startInterval(){
    clearInterval(interval);
    interval = setInterval('rotate()',3000);
}

複数の間隔を作成する必要がある場合は、ID を配列に保存してそれらを追跡できます。

var arr = [];

//set the interval
arr.push(setInterval(...));

//get number of currently running intervals
var count = arr.length //gives you the number of currently running intervals

//clear the interval with index i
clearInterval(arr[i]);
arr.splice(i, 1);
于 2013-05-29T22:51:14.507 に答える