JavaScript Timer clearInterval并发症

时间:2015-09-01 00:37:23

标签: javascript timer

因此,我试图在不使用API​​的情况下制作番茄钟计时器(我知道,这是一个愚蠢的选择),但我觉得好像我过度复杂化了这个问题。

我分叉了我的CodePen,所以我可以在这里发布当前代码,而不会让任何人感到困惑。 My Code Pen

要查看我的问题:只需将Timer设置为.1并将Break设置为.1 - 您将看到Start to Resume正常工作,但Resume to start存在问题。

我内置了consoleLogs来跟踪它,我看到工作计时器TRIES开始但是breakTimer会过度运行它,并且每次传递都会重复。

为什么我的clearInterval没有工作?

我尝试过的事情: 调整clearInterval的名称, 设置它使它返回到startTimer而不是start 强制退出(而不是将其循环回startInterval。

该函数与我的startFunction几乎完全相同,但无法正常工作。非常感谢任何输入(我是clearInterval的新手,但我相信我正在使用它。)

  function breakTimer() {
    $('.jumbotron').css('visibility', 'visible');
    setInterval(function() {
      console.log("Break Timer...");
    breakTime--;
    if (breakTime < 0) {
      clearInterval(timer);
      working = false;
      start();
    } else {
      showTime(breakTime);
    }
  }, 1000);
}

修改

回答回复:

function start() {     
    if (working == true){ //This keeps it from being spammable
        return;
    } //Else
        workTime = $('#work').val()*60;
        breakTime = $('#break').val()*60;
        working = true;
        checkStatus();    
        timer = startTimer();
} 

不确定我是否应该发布每个功能

1 个答案:

答案 0 :(得分:0)

根据定义,setInterval(...)返回的值是创建的计时器的ID。因此,使用您的代码,您只能停止上次创建的计时器,因为timer变量中的ID会被覆盖,导致它失去对先前创建的(并且仍在运行的)计时器的控制。

ID是您传递给clearInterval(...)以停止计时器的ID。你必须以不同的方式做到这一点。您可以在https://codereview.stackexchange.com/

中提出不同的方式