清除嵌套的setInterval?

时间:2014-06-29 20:07:17

标签: javascript setinterval clearinterval

清除嵌套在另一个setInterval中的setInterval时遇到一些麻烦。

polling被清除得很好,但是marque(全局设置)会一直亮起,即使已清除多次在控制台中吐出。

listener: function() {
    var polling;

    journalScroll.on('scrollEnd', function() {
        clearInterval(polling);
        Roots.common.journal.scroll.status();
        console.log('scrollend');
    });

    journalScroll.on('scrollStart', function() {
      polling = setInterval(Roots.common.journal.scroll.status, 1250); // Time in milliseconds
      console.log('scrollstart');
    });
},

status: function() {
  console.log('scroll status');

  if((journalScroll.y*-1) < $(window).height() * 3) {
    console.log('setinterval');
    marque = setInterval(function() {
      Roots.common.journal.scroll.marque();
    }, 50);
  } else {
    clearInterval(marque);
    console.log('cleared');
  }
},

marque: function() {
  console.log('polling marque');        
},

1 个答案:

答案 0 :(得分:2)

setInterval只返回一个ID(整数),并将尝试无限期地运行一个计时器,直到您将相同的ID传递回clearInterval函数。由于 事件 异步 功能的相对不可预测性,调用和回调通常会导致{{3 }}

例如,您的代码可能正在创建一个新的时间间隔,并在清除旧时间间隔之前为marque变量分配不同的ID - 这会导致它成为“孤儿”#34;因为它仍在运行,你没有ID可以取消它。

没有看到你的所有代码都是最简单的方法来修复&#34;问题是在clearInterval(marque);函数setInterval之前盲目status - 确保在这种情况下,任何时间点只有一个时间间隔有效。