Javascript 每次复位定时器都会越来越快
每次我重置计时器时,它都会越来越快。我想我需要使用Javascript 每次复位定时器都会越来越快,javascript,jquery,timer,settimeout,cleartimeout,Javascript,Jquery,Timer,Settimeout,Cleartimeout,每次我重置计时器时,它都会越来越快。我想我需要使用clearTimeout,但不确定如何实现它。代码如下: $(function(){ sessionmin = 25; $("#sessionMinutes").html(sessionmin); $("#circle").click(function() { timeInSeconds = sessionmin * 60; timeout(); }); }) function timeout(){ se
clearTimeout
,但不确定如何实现它。代码如下:
$(function(){
sessionmin = 25;
$("#sessionMinutes").html(sessionmin);
$("#circle").click(function() {
timeInSeconds = sessionmin * 60;
timeout();
});
})
function timeout(){
setTimeout(function () {
if (timeInSeconds > 0) {
timeInSeconds -= 1;
hours = Math.floor(timeInSeconds/3600);
minutes = Math.floor((timeInSeconds - hours*3600)/60);
seconds = Math.floor(timeInSeconds - hours*3600 - minutes*60);
$("#timer").html(hours + ":" + minutes + ":" + seconds);
}
timeout();
}, 1000);
}
您应该:使用
setInterval
而不是setTimeout
,返回setInterval
生成的间隔id,在重新启动之前清除该间隔。以下是一个例子:
您必须将
setTimeout
定义为一个变量来重置它
每次单击时,都会添加一个新的自调用超时
$(function(){
var sessionmin = 25;
var intervalId = null;
$("#sessionMinutes").html(sessionmin);
$("#circle").click(function() {
timeInSeconds = sessionmin * 60;
// clear the current interval so your code isn't running multiple times
clearInterval(intervalId);
// restart the timer
intervalId = run();
});
})
function run(){
return setInterval(function () {
if(timeInSeconds>0){
timeInSeconds-=1;
hours = Math.floor(timeInSeconds/3600);
minutes = Math.floor((timeInSeconds - hours)/60);
seconds = (timeInSeconds - hours*3600 - minutes*60)
$("#timer").html(hours + ":" + minutes + ":" + seconds);
}
}, 1000);
}
var thisTimer; // Variable declaration.
$(function(){
sessionmin = 25;
$("#sessionMinutes").html(sessionmin);
$("#circle").click(function(){
clearTimeout(thisTimer); // Clear previous timeout
timeInSeconds = sessionmin * 60;
timeout();
});
})
function timeout(){
thisTimer = setTimeout(function () { // define a timeout into a variable
if(timeInSeconds>0){
timeInSeconds-=1;
hours = Math.floor(timeInSeconds/3600);
minutes = Math.floor((timeInSeconds - hours)/60);
seconds = (timeInSeconds - hours*3600 - minutes*60)
$("#timer").html(hours + ":" + minutes + ":" + seconds);
}
timeout();
}, 1000);
}