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

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

使っています

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) {  }

ベストアンサー1

「何もしない」新しいタイマーを作成し (数十年後に実行するようにスケジュールされた空の関数を指定して)、「最も高い」タイマー識別子を見つけて、次のように ID 1 とその識別子の間のすべてのタイマーをクリアします。

// Get a reference to the last interval + 1
const interval_id = window.setInterval(function(){}, Number.MAX_SAFE_INTEGER);

// Clear any timeout/interval up to that id
for (let i = 1; i < interval_id; i++) {
  window.clearInterval(i);
}

ただし、これは保証された機能する: HTML標準実際には処方しないタイムアウト/間隔識別子がどのように割り当てられるかは不明なので、「最後の間隔識別子 + 1」への参照を取得するという仮定は単なる仮定です。この回答の時点ではほとんどのブラウザで当てはまるかもしれませんが、保証同じブラウザの次のバージョンでも同じ状況が続くでしょう。

おすすめ記事