2013-12-08 3 views
-1

저는이 자바 스크립트 타이머를 작업 중이며 시간, 분 및 초가 0 일 때 왜 멈추지 않는지 이해할 수 없습니다.타이머가 0에 도달하면 끝내 지 않습니다.

코드 :

var s= 18000; 
var h= Math.floor(s/3600); 
s-= h*3600; 
var m= Math.floor(s/60); 
s -= m*60; 
var counter=setInterval(timer, 1000); //1000 will run it every 1 second 

function timer() 
{ 
    if(s == 0){ 
    if(m == 0){ 
     h=h-1; 
     s=59; 
     m=59; 
     if(h == 0){ 
     clearInterval(counter); 
     } 
    } else { 
     m=m-1; 
     s=59; 
    } 
    //Do code for showing the number of seconds here 
    } else { 
    s = s - 1; 
    } 
    document.getElementById("timer").innerHTML=h+'hrs '+m+'min '+s+'secs '; 
} 
+0

카운터에 정확히 1 시간 후에 카운터가 1 초 멈 춥니 다. (0:59:59) – Sumurai8

+0

그것은 당신이 *** ***에서 h를 빼기 *** ***는 59로 설정 *** *** ***는 m을 59로 설정합니다. 세 줄 및 s를 1800보다는 초기 값 10으로 설정하면 타이머가 10 초 후에 중지됩니다. – enhzflep

답변

0
문제는 여기이 섹션의 논리 것으로 보인다

...

if(s == 0){ 
    if(m == 0){ 
     h=h-1; // what if h is also 0 here?? this would set it negative 
     s=59; 
     m=59; 
     if(h == 0){ 
     clearInterval(counter); 
     } 

난 당신이 감소하기 전에 ... 빨리 당신의 if(h==0) 검사를 수행해야한다고 생각 값. 따라서 if (s == 0 && m == 00 && h == 0)으로 if else 블록을 시작한 다음 간격을 지우려면이 블록을 사용하는 것이 좋습니다. 모든 것이 이미 0이면 더 이상 값을 변경하지 않으려 고합니다.

1

내가 여기에서 볼 문제는 당신이 1 때 모든 시간 변수를 h 변수를 감소거야 - 그리고 시간 변수에 의해 나는 h, ms은 0으로 설정됩니다 의미 :

if(s == 0) { 
    if(m == 0) { 
     h=h-1; 
     s=59; 
     m=59; 
// more code goes here 

을 따라서 h-1이고 타이머는 절대로 멈추지 않습니다.
내가 제안 할 수있는 최선의 방법은 타이머를 완전히 다시 쓰고 여기에서 초만 사용하는 것입니다. timer 함수가 호출 될 때마다 s이 0과 같은지 확인합니다. 그렇다면 타이머를 중지합니다. 그렇지 않은 경우 s을 1 씩 감소시킵니다. #timer 요소의 내부 HTML을 업데이트하려면 timer 메서드를 호출 할 때마다시, 분 및 초 수를 다시 계산할 수 있습니다.이 솔루션은 체인보다 훨씬 이해하기 쉽고 유지 관리가 쉽습니다 중첩 된 조건문.

+0

그냥 내가 somehwere을 받고 있다고 생각했을 때 .. – crm

+0

나는 당신이 말하는 첫 번째 부분을 얻을. 그러나시, 분, 초를 표시하는 것은 매시간, 분 및 초를 계산할 것을 제안합니까? – crm

+0

@crm 네, 그게 제가 제안하는 것입니다. – aga