2012-07-19 6 views
1

코드는 다음과 같습니다. 타이머를 일시 중지하고 다시 시작 버튼을 누르면 버튼을 어떻게 설정 하시겠습니까? 아래의 // 표시는 일시 중지 및 재개 태그를 배치하는 위치입니다. 도와 주셔서 감사합니다 !!자바 스크립트 타이머 일시 중지

<head> 
<script type="text/javascript"> 

var d1 = new Date(); 
d1.setHours(1,0,0); 

function f(){ 
var h= d1.getHours(); 
var m= d1.getMinutes(); 
var s=d1.getSeconds(); 
m= (m<10)?"0"+m: m; 
s= (s<10)? "0"+s : s; 

var el= document.getElementById("inputid"); 
el.value= h+":"+m+":"+s; 
d1.setSeconds(d1.getSeconds()-1); 
if(h==0 && m==0 && s==0) clearTimeout(t) 
var t= setTimeout("f()",1000); 
} 

</script> 
</head> 
<body> 
<form><input type="text" id="inputid"></form> 
<script type="text/javascript">f()</script> 

//pause and resume buttons would go here. 
</body> 

답변

0

당신은 당신의 경우 t에, 그것을 setTimeout의 반환을 통과 clearTimeout()와 타임 아웃을 중지하거나 할 수 있습니다.

라이브 예 : http://jsfiddle.net/tJWmH/

또 다른 포인터 : 그나마 대신 때문에, 함수 참조를 전달, setTimeout에 문자열을 전달 :

var t = setTimeout(f,1000) 

을 장소에

var t = setTimeout("f()",1000); 

의 경우 당신 ' 이유가 궁금해서 다시 검색 "eval is evil".

+0

빠른 응답을 보내 주셔서 감사합니다! – ttran4040

0

또 다른 접근법은 버튼을 누를 때 paused과 같은 변수를 설정하는 것입니다. f 함수에서 paused가 true이면 즉시 반환하십시오.

setInterval(function(){ 
    if (paused) return; 
    // update the dom 
}, 1000); 

입력

<input type="button" value="Pause" onClick="window.paused=true" /> 

Here is a basic fiddle

+0

다시 시작 하시겠습니까? – ttran4040

+0

이력서 버튼이'paused = false'를 설정합니다. – hvgotcodes

+0

이것을 'setInterval'로 변경해야한다고 생각하십시오. 그렇지 않으면 일시 정지해도 함수의 일정이 재조정되지 않습니다. – Jamiec

0

이 내 코드가 아닙니다. 나는 그것을 발견하고 내 프로젝트에서 사용합니다. 여기에 원래의 게시물입니다 : https://stackoverflow.com/a/3969760/1250044

Timer = function(callback, delay) { 
    var timerId, start, remaining = delay; 

    this.pause = function() { 
    window.clearTimeout(timerId); 
    remaining -= new Date() - start; 
    }; 

    this.resume = function() { 
    start = new Date(); 
    timerId = window.setTimeout(callback, remaining); 
    }; 

    this.resume(); 
}; 

사용 :

var t = new Timer(function(){ 
/* ... */ 
}, 500); 

t.pause(); 
t.resume(); 
0

이 시도 :

var d1 = new Date(); 
d1.setHours(1,0,0); 
var t; 


function f() { 
    var h= d1.getHours(); 
    var m= d1.getMinutes(); 
    var s=d1.getSeconds(); 
    m= (m < 10) ? ('0'+m) : m; 
    s= (s < 10) ? ('0'+s) : s; 

    var el= document.getElementById("inputid"); 
    el.value = h+":"+m+":"+s; 

    if(h==0 && m==0 && s==0) { 
     clearTimeout(t) 
     return; 
    } 
    d1.setSeconds(d1.getSeconds()-1); 

    t= setTimeout(f,1000); 

} 

function pause() { 
    clearTimeout(t); 
} 
function resume() { 
    t= setTimeout(f,1000); 
} 
resume(); 

당신은 그냥 다시 시작()을 일시 정지()를 호출하고 다시 시작합니다. 그게 다야! 카운터를 시작하기 위해 resume()을 한 번 호출합니다.

편집 : 감소하기 전에 0에 도달했는지 확인한 다음 다시 시작하면 이력서가 계속 작동하지 않습니다.

관련 문제