代码如下。您如何设置按钮以暂停计时器并在按下继续时恢复?下面的//标记是我放置暂停和恢复标签的地方。谢谢你的帮助!!
<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 :(得分:1)
另一种方法是:按下按钮时,设置像paused
这样的变量。在f
函数中,如果暂停为真,则只需立即返回。
setInterval(function(){
if (paused) return;
// update the dom
}, 1000);
输入
<input type="button" value="Pause" onClick="window.paused=true" />
答案 1 :(得分:0)
您可以通过clearTimeout()
将setTimeout
或t
的回复传递给setTimeout
来停止超时。
另一个指针:不要将字符串传递给var t = setTimeout(f,1000)
,而是传递函数引用,所以:
var t = setTimeout("f()",1000);
取代
{{1}}
如果您想知道原因,请搜索"eval is evil".
答案 2 :(得分: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();
答案 3 :(得分: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();
你只需要调用pause()来暂停它,然后恢复()来恢复它。而已! 请注意,我正在调用resume()一次,只是为了启动计数器。
编辑:您必须在递减之前检查它是否达到零,然后返回以便按下简历不会继续工作。