2013-04-21 2 views
2

У меня есть этот код для таймера, я пытаюсь заставить его остановиться на 0: 0, но он продолжает идти в отрицательные числа. любые идеи исправить это могли бы помочь.Как остановить таймер JavaScript при 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

Вы всегда запуская новый таймер в конце startTimer, даже если вы до нуля. Быстрое решение состоит в том, чтобы добавить return; после вместо clearTimeout(t);.

+0

«clearTimeout» на самом деле не обязательно, так как к этому моменту итерация таймаута уже завершена. –

+0

@PaulS .: Хорошая точка; изм. – RichieHindle

+0

Спасибо, что помогли! теперь мне нужно разобраться, как сделать паузу. – user2303981

-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"); 

     } 
       }` 
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

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 не работает точно в срок, указанный поэтому он должен использовать объект даты, чтобы настроить задержку к следующая полная секунда.

Смежные вопросы