ClearInterval是否删除调用事件JS

时间:2017-08-27 06:55:20

标签: javascript html events settimeout setinterval

所以,我有一个包含大量setTimeoutsetInterval的脚本。

我的问题是当我使用clearInterval方法时,我想知道方法是否在触发后停止了该函数,或者该方法是否肯定删除了触发事件。对我来说非常重要的是要知道,如果clearInterval没有删除触发事件,计算机会继续调用很多可能导致计算机速度变慢的事件。

我的代码有点长,在本文中完全列出,但我使用setInterval这样:

teste = [];
teste.push (window.setInterval (function () {Do stuff...}, 20));
  // The same for window.setTimeout();

触发clearInterval方法可以阻止:

window.setInterval (function () {
  /*Here after firing or can stop the firing event*/
  Do stuff...
}, 20);

我删除了setInterval,如下所示:

window.clearInterval (teste [teste.length-1]);   // The same for window.clearTimeout ();

感谢任何帮助,

如果您有任何问题或意见,请告诉我。

由于

1 个答案:

答案 0 :(得分:0)

我会在这里使用不同的方法:

var queue = [];

function prepare (fx, delay, repeated) {
  return {
    fx: fx,
    at: new Date().getTime() + delay,
    repeated: !!repeated
  }
}

queue.push(prepare(function () {…}, 20));
.
queue.push(prepare(function () {…}, 20), true);
.
.
.

window.setTimeout(function check() {
  var now = new Date().getTime(), 
            newQueue = [], 
            i = 0, entry;

  for (; i < queue.length; i++) {
    entry = queue[i];

    if (entry.at <= now) {
      entry.fx();

      if (entry.repeated) newQueue.push(entry);

    } else {
      newQueue.push(entry);
    }
  }

  queue = newQueue;
  window.setTimeout(check, 1);

}, 1);

这样,您只有一个计时器/间隔在运行,因此可以完全控制所调用的内容并进行调用。此外,JS Event Queue不会出现任何问题,可能会及时运行。