2012-07-19 90 views
1

代码如下。你将如何设置一个按钮来暂停计时器,并按下继续时继续?下面的//标记是我放置暂停和恢复标记的位置。感谢您的帮助!JavaScript Timer暂停

<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

您可以停止与clearTimeout()超时,把它传到setTimeout退货或者,你的情况t

活生生的例子:http://jsfiddle.net/tJWmH/

另一个指针:不要将字符串传递到setTimeout,而是传递一个函数引用,所以:在地方

var t = setTimeout(f,1000) 

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

,如果你”想知道为什么,搜索"eval is evil".

+0

感谢您的快速响应! – ttran4040 2012-07-19 14:51:12

0

另一种方法是:按下按钮时,设置一个变量,如paused。在您的f函数中,如果暂停为真,则立即返回。

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 2012-07-19 14:54:02

+0

恢复按钮设置为“paused = false” – hvgotcodes 2012-07-19 14:54:45

+0

认为您需要将其更改为'setInterval',否则如果您暂停,该功能将不会被重新计划。 – Jamiec 2012-07-19 14:57:57

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()恢复它。而已! 请注意,我致电resume()一次,只是为了启动计数器。

编辑:你必须检查它是否达到零之前递减,并返回,以便按下继续将不会继续工作。