清除间隔在函数中的if语句内不起作用

时间:2016-05-11 09:18:34

标签: javascript

我正在尝试创建一个简单的倒数计时器,一旦遇到麻痹情况就会动态停止。 (在倒计时应该停止时实现setTimeout到演示

我通常不会使用setInterval/clearInterval这样的东西,所以我研究并尝试了一些我发现但仍然无效的东西。

我相信这里只有很少的差异。

这是代码。



var intervals;
function startTimer(isStarted) {
  intervals = setInterval(_countDown, 1000);
  var requestTimer = 60,
      seconds;

  function _countDown() {
    seconds = parseInt(requestTimer % 60, 10);
    seconds = seconds < 10 ? "0" + seconds : seconds;

    console.log(seconds);

    if (--requestTimer < 0) {
      requestTimer = 60;
    }
  }

  if (!isStarted) {
    console.log("timer now should stop!!!!!!");
    clearInterval(intervals);
  }
}

startTimer(true);
setTimeout(startTimer, 3000);
&#13;
<h1>Open the console to see the timer.</h1>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

实际上,由于两次调用startTimer-method(最后两行代码),因此实际上是两次启动间隔。这就是为什么单个clearTimeout不再削减它的原因。您还可以在声明应执行的函数之前设置间隔。所以我会简化这样的事情:

var interval;
function startTimer() {      
  var requestTimer = 60,
      seconds;

  function _countDown() {
    seconds = parseInt(requestTimer % 60, 10);
    seconds = seconds < 10 ? "0" + seconds : seconds;

    console.log(seconds);

    if (--requestTimer < 0) {
      requestTimer = 60;
    }
  }

  interval = setInterval(_countDown, 1000);
}

startTimer();
setTimeout(function() {
    console.log("timer now should stop!!!!!!");
    clearTimeout(interval);
}, 3000);