ホームページ >ウェブフロントエンド >jsチュートリアル >「doKeyDown」関数で「setInterval」が不要なループを作成するのを防ぐために「clearInterval」を使用するにはどうすればよいですか?

「doKeyDown」関数で「setInterval」が不要なループを作成するのを防ぐために「clearInterval」を使用するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-03 18:06:18805ブラウズ

How Can I Use `clearInterval` to Prevent `setInterval` from Creating an Unwanted Loop in My `doKeyDown` Function?

setInterval 関数とclearInterval 関数の使用

次のコード ブロックを検討する場合:

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() 関数が 1 回だけ呼び出されることが望まれます。

clearInterval の使い方

この問題を解決するには、clearInterval 関数を使用します。 setInterval 関数は繰り返しタイマーを設定し、タイマーを停止するために clearInterval に渡すことができるハンドルを返します。

var handle = setInterval(drawAll, 20);

// 当需要取消计时器时:
clearInterval(handle);
handle = 0; // 这样可以得知已经清除了计时器

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

setTimeout を使用する

一度だけ起動するタイマーをスケジュールするには関数では、setTimeout 関数を使用できます。継続的に発動するわけではありません。 (必要に応じてハンドルも返します。関数が一度起動される前に関数をキャンセルする必要がある場合は、clearTimeout を使用できます)。

setTimeout(drawAll, 20);

以上が「doKeyDown」関数で「setInterval」が不要なループを作成するのを防ぐために「clearInterval」を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。