web-dev-qa-db-ja.com

すべての間隔をクリアするにはどうすればよいですか?

使っています

varName = setInterval(function() { ... }, 1000);

私が書いているjqueryプラグインにいくつかの間隔を設定するには、プラグインをリロードするときにそれらの間隔をクリアする必要があります。次のように変数に保存してみました:

(function($){
$.mosaicSlider = function(el) {
    var base = this;        
    var transitionInterval, mainInterval;

...

base.init = function() {
    mainInterval = setInverval(function() { ... }, 1000);
}

base.grid = function() {
    this.transition() = function() {
         transitionInterval = setInterval(function(...) {
    }
}

base.init();

そして、次のようにbase.init()関数でこれらの間隔を強制終了しました。

clearInterval(transitionInterval);
clearInterval(mainInterval);

そしてこのように:

window.oldSetInterval = window.setInterval;
window.setInterval = new function(func, interval) {  }
40
Nikolay Dyankov

好きなことができます、

var interval_id = window.setInterval("", 9999); // Get a reference to the last
                                                // interval +1
for (var i = 1; i < interval_id; i++)
        window.clearInterval(i);
//for clearing all intervals
45

オブジェクトにそれらを保存します。これらの間隔を作成するのはあなただけであり、それらが何であるかを知っているので、それらを保存し、後で希望するようにそれらを混乱させることができます。次のような、まさにそれ専用のオブジェクトを作成します。

var interval = {
    // to keep a reference to all the intervals
    intervals : new Set(),

    // create another interval
    make(...args) {
        var newInterval = setInterval(...args);
        this.intervals.add(newInterval);
        return newInterval;
    },

    // clear a single interval
    clear(id) {
        this.interals.delete(id);
        return clearInterval(id);
    },

    // clear all intervals
    clearAll() {
        for (var id of this.intervals) {
            this.clear(id);
        }
    }
};

最初の質問は

なぜそれ専用のオブジェクトを作成するのですか?

ワトソンさん、プラグイン/プロジェクトに関連する手作りの間隔をpr索好きな目から遠ざけるため、プラグインに関連しないページに設定されている他の間隔を台無しにしないでください。

はい、でもなぜベースオブジェクト内に保存できないのですか?

確かにできますが、この方法はずっときれいだと思います。これは、ベースで実行するロジックを奇妙なタイムアウトロジックで分離します。

間隔を Set ではなく配列内に格納したのはなぜですか?

より高速なアクセスと少し簡潔なコード。本当にどちらにでも行けます。

58
Zirak

Timerを初期化し、ウィンドウオブジェクトとして設定します。 Window.Intervalは、タイマーのIDを保持します。

window.myInterval = setInterval(function() { console.log('hi'); }, 1000);など

間隔をクリアするには、次のように書くことができます

if(window.myInterval != undefined && window.myInterval != 'undefined'){
    window.clearInterval(window.myInterval);
    alert('Timer cleared with id'+window.myInterval);
}
8
Shujaath Khan