2013-04-21 3 views
2

나는이 코드를 타이머 용으로 가지고 있는데, 0 : 0에서 멈추도록하려고 시도하고 있지만 음수로 계속 남겨두고있다. 이 문제를 해결할 수있는 아이디어가 도움이 될 것입니다.0 : 0에서 JavaScript 타이머를 멈추는 방법

<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이 되더라도 startTimer의 끝에서 항상 새 타이머를 실행합니다. 빠른 수정은 clearTimeout(t); 대신 다음에 return; 을 추가하는 것입니다.

+0

'clearTimeout'은 그 시점에서 타임 아웃의 반복이 이미 완료되었으므로 실제로는 필요하지 않습니다. –

+0

@ 폴 : 좋은 지적; 편집 됨. – 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보다 때를 호출 할 수

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

또는 속기 버전이 같은 0 :

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으로 드리프트 것

다음 초.

관련 문제