JavaScript定时器暂停
代码如下。按resume时,如何设置暂停计时器和继续的按钮?下面的//标记是我放置暂停和恢复标记的位置。谢谢你的帮助JavaScript定时器暂停,javascript,timer,Javascript,Timer,代码如下。按resume时,如何设置暂停计时器和继续的按钮?下面的//标记是我放置暂停和恢复标记的位置。谢谢你的帮助 <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)?"
<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>
var d1=新日期();
d1.设定时间(1,0,0);
函数f(){
var h=d1.getHours();
var m=d1.getMinutes();
var s=d1.getSeconds();
m=(m您可以通过clearTimeout()
传递setTimeout
的返回值来停止超时,或者在您的情况下,t
实例:
另一个指针:不要将字符串传递给setTimeout
,而是传递函数引用,因此:
var t = setTimeout(f,1000)
代替
var t = setTimeout("f()",1000);
如果您想知道原因,请搜索另一种方法是:按下按钮时,设置一个变量,如paused
。在f
函数中,如果paused为true,只需立即返回即可
setInterval(function(){
if (paused) return;
// update the dom
}, 1000);
输入
这不是我的代码。我找到了它并在我的项目中使用。以下是原始帖子:
使用:
试试这个:
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();
var d1=新日期();
d1.设定时间(1,0,0);
变量t;
函数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;
如果(h==0&&m==0&&s==0){
清除超时(t)
返回;
}
d1.setSeconds(d1.getSeconds()-1);
t=设置超时(f,1000);
}
函数暂停(){
清除超时(t);
}
功能恢复(){
t=设置超时(f,1000);
}
恢复();
您只需调用pause()来暂停它,然后调用resume()来恢复它。就是这样!
请注意,我调用resume()一次,只是为了启动计数器
编辑:在递减之前,您必须检查它是否达到零,然后返回,这样按resume就不会继续工作。感谢您的快速响应!resume按钮设置pause=false
认为您需要将其更改为setInterval
,否则如果您暂停,功能将不会重新安排。不,setTimeout也可以,只有当计数器达到零时,他才会清除超时(还需要一个else分支)。所以这没关系。请参阅我对您问题的回答!
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();
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();