setIntervalとclearIntervalの使い方は?


138
function doKeyDown(event) {
    switch (event.keyCode) {
    case 32:
        /* Space bar was pressed */
        if (x == 4) {
            setInterval(drawAll, 20);
        }
        else {
            setInterval(drawAll, 20);
            x += dx;
        }
        break;
    }
}

こんにちは、みんな、

drawAll()も呼び出すループを作成せずに一度呼び出したいのですがdrawAll、そのために再帰メソッドを使用する必要がありますclearIntervalか、それとも使用する必要がありますか?

また、使用を教えてくださいclearInterval?ありがとう:)

回答:


210

setInterval繰り返しタイマーを設定します。それはあなたがclearIntervalそれが発火するのを止めるために渡すことができるハンドルを返します:

var handle = setInterval(drawAll, 20);

// When you want to cancel it:
clearInterval(handle);
handle = 0; // I just do this so I know I've cleared the interval

ブラウザでは、ハンドルはと等しくない数値であることが保証されてい0ます。したがって、0「タイマーが設定されていない」場合に便利なフラグ値を作成します。(他のプラットフォームは他の値を返す場合があります。たとえば、NodeJSのタイマー関数はオブジェクトを返します。)

関数を1回だけ起動するようにスケジュールするには、setTimeout代わりにを使用します。発砲し続けません。(またclearTimeout、必要に応じて、1回起動する前にそれをキャンセルするために使用できるハンドルも返します。)

setTimeout(drawAll, 20);

29

clearIntervalは1つのオプションです。

var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec 
function doStuff() {
  alert('this is a 2 second warning');
  clearInterval(interval);
}

7
setIntervalまたはで文字列を使用しないでくださいsetTimeout
TJクラウダー

1
doStuff()を囲む引用符を削除する必要があるということですか?
ジョシュア-ペンドー

9
はい、引用符と括弧です。単に:setInterval(doStuff);。文字列をに渡すsetIntervalと、が暗黙的に呼び出されevalます。代わりに関数参照を渡すのが最善です。
TJクラウダー

1
ええと、おそらく反対投票はおそらく公正です。私は正しくない例を示しました(ただし、私の場合は機能しますが、話すときにこれらを変更しています)。いいぞ!:)
ジョシュア-ペンド

10

setTimeout(drawAll, 20)代わりに使用してください。これは、関数を1回だけ実行します。


どうもありがとうございましたが、setTimeoutは各ポイントでループを終了しています。他のアプローチとその正常な動作を使用しています。関数doKeyDown(event){switch(event.keyCode){ケース32:/ *スペースバーが押されました* / loop = setInterval (drawAll、20); if(x == 202){x = 400; spinner(); }休憩; }}
Raj

それは問題ではなかった
NinoŠkopac'15年

7

私は電子で角度を使いました、

私の場合、setIntervalNodejsタイマーオブジェクトを返します。私がclearInterval(timerobject)それを呼んだときそれはうまくいきませんでした。

最初にIDを取得し、clearIntervalを呼び出す必要がありました

clearInterval(timerobject._id)

これで何時間も苦労しました。お役に立てれば。


5

補足:間隔を設定およびクリアするために個別の関数を使用する場合、間隔変数は、「相対グローバル」または「1レベル上の」スコープでそれらすべてにアクセスできる必要があります。

var interval = null;    

function startStuff(func, time) {
    interval = setInterval(func, time);
}

function stopStuff() {
    clearInterval(interval);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.