0

タイムアウトをクリアする必要があり、その方法がわかりませんでした。window オブジェクトから clearTimeout メソッドに何を渡すかわかりません...何かヒントはありますか?

                for (var k = 0; k <= arr2.length; k++) {

                  (function (k) {
                      window.setTimeout(function () {

                          //do something

                      }, 6000 * k);
                  })(k);

               }
4

2 に答える 2

3

大量のタイマーを作成しているためarr2.length、特定のタイマーを「殺す」必要がある場合は、参照の配列が必要です。

//create a reference storage
var timerRefs = [];

for (var k = 0; k <= arr2.length; k++) {
    (function (k) {

        //reference the timeout to a variable
        var ref = window.setTimeout(function () {
            //do something
        }, 6000 * k);

        //store that reference in the array
        timerRefs.push(ref);
    })(k);
}

特定のものをクリアするには、次のようにします。

clearTimeout(timerRefs[N]); //where N is the index of that timer
于 2012-05-28T01:02:40.380 に答える
2

タイムアウトをキャンセル可能にしたい場合は、その戻り値を取得する必要があります。

var myTimer = setTimeout(...);

次に、その値を関数に渡すだけです。

clearTimeout(myTimer);

個人的には、次のように書き直します。

(function(inp) {
    var k = 0, l = inp.length, timer;
    timer = setInterval(function() {
        // do something with inp[k];
        k++;
        if( k > l) clearInterval(timer);
    },6000);
})(arr2);

一部のブラウザー (特に Firefox) は、一度に実行されるタイムアウトが多すぎるとうまく反応しません。

于 2012-05-28T00:59:56.040 に答える