如何在0:0停止JavaScript计时器

时间:2013-04-21 12:50:21

标签: javascript timer

我有一个计时器的代码,我试图让它停在0:0但它继续进入负数。任何解决这个问题的想法都会有所帮助。

<html>
  <head>
    <script>
      function startTimer(m,s)
      {
        document.getElementById('timer').innerHTML= m+":"+s;
        if (s==0)
        {
          if (m == 0)
          {
            clearTimeout(t);
          }
          else if (m != 0)
          {
            m = m-1;
            s = 60;
          }
        }
        s = s-1;
        t=setTimeout(function(){startTimer(m,s)},1000);
      }
    </script>
  </head>

  <body>
    <button onClick = "startTimer(0,5)">Start</button>

    <p id = "timer">00:00</p>
  </body>
</html>

4 个答案:

答案 0 :(得分:4)

你总是在startTimer结束时开始一个新的计时器,即使你达到零。快速解决方法是在之后添加return; 而不是clearTimeout(t);

答案 1 :(得分:0)

你可以在外部使用超时功能,并在时间大于0:0时调用它,如下所示:

  function startTimer(m,s)
  {
    document.getElementById('timer').innerHTML= m+":"+s;
    if (s==0)
    {
      if (m == 0)
      {
        alert('done');
      }
      else if (m != 0)
      {
        m = m-1;
        s = 60;
        t();
      }
    }
    s = s-1;
    t();
    function t(){setTimeout(function(){startTimer(m,s)},1000)};
  }

或速记版本:

  function startTimer(m,s)
  {
    document.getElementById('timer').innerHTML= m+":"+s;
      (s == 0) ? (m == 0 ? alert('done') : (m--, s = 60, t())) : (s--, t());
      function t(){ setTimeout(function(){startTimer(m,s)},1000)};
  }

jsfiddle

答案 2 :(得分:0)

只是评论 - 这个功能可以更加苗条:

function pad(n) {
  return (n<10? '0':'') + n;
}

function startTimer(m,s) {
  document.getElementById('timer').innerHTML = pad(m) + ":" + pad(s);
  s -= s? 1 : m-- && -59;
  if (m != -1) 
    setTimeout(function(){startTimer(m,s)},1000);
}

它会慢慢漂移,因为setTimeout没有在指定的时间运行,因此它应该使用日期对象将滞后调整到下一整秒。

答案 3 :(得分:-1)

这是我写的旧代码:

          function CountDown(TimeToCount){

        if(First)
        {
            var startDatum=new Date();
            First = false;
            date.a = startDatum;
            bye = TimeToCount-200;
        }
        if(bye > 0 && CDown){
            var zielDatum=new Date();
            bye =Math.abs(Math.floor(( ((zielDatum-(TimeToCount-200)-date.a)/1000) - 0.1)*10)/10);

            if ( bye * 10 % 10 ==0)

                $(".CountDown").html(bye+".0");
            else
                $(".CountDown").html(bye);
            setTimeout(function(){CountDown(TimeToCount)},20);

        }
            else
        {           $(".CountDown").html("0.0");

        }
               }`