如何清除所有间隔?

时间:2011-12-26 11:57:20

标签: javascript jquery set

我正在使用

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

4 个答案:

答案 0 :(得分:56)

将em存储在对象中。由于你是唯一一个制作这些间隔的人,并且你知道它们是什么,你可以存储它们,然后随意弄乱它们。我会创建一个专门用于此目的的对象,例如:

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

您的第一个问题可能是

  

为什么要为此单独创建一个对象?

Watson,这是为了让你的插件/项目的手工间隔远离窥探,所以你不会弄乱在与你的插件无关的页面中设置的其他间隔。

  

是的,但为什么我不能将它存储在基础对象中?

你当然可以,但我认为这种方式更清洁。它将您在基础中执行的逻辑与奇怪的超时逻辑分开。

  

为什么要将间隔存储在Set而不是数组中?

访问速度更快,代码更简洁。你可以去任何一种方式,真的。

答案 1 :(得分:42)

你可以这样做,

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

答案 2 :(得分:8)

初始化计时器并将其设置为窗口对象。 Window.myInterval 将保留计时器的ID。

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

要清除Interval,您可以像

一样编写
if(window.myInterval != undefined && window.myInterval != 'undefined'){
    window.clearInterval(window.myInterval);
    alert('Timer cleared with id'+window.myInterval);
}

答案 3 :(得分:0)

设置间隔后,您将获得一个指向它的指针。 要清除所有间隔,您需要存储所有间隔:

// Initially
var arr = [];
arr.push(setInterval(function () {
    console.log(1);
  }, 1000));
arr.push(setInterval(function () {
    console.log(2);
  }, 1000));
arr.push(setInterval(function () {
    console.log(3);
  }, 1000));
  

以下循环将清除所有间隔

// Clear multiple Intervals
  arr.map((a) => {
    console.log(a)
    clearInterval(a);
    arr = [];
  })