我一直在研究这个javascript计时器,并且无法理解为什么它在小时,分钟和秒等于零时不会停止。
代码:
var s= 18000;
var h= Math.floor(s/3600);
s-= h*3600;
var m= Math.floor(s/60);
s -= m*60;
var counter=setInterval(timer, 1000); //1000 will run it every 1 second
function timer()
{
if(s == 0 ){
if(m == 0){
h=h-1;
s=59;
m=59;
if(h == 0){
clearInterval(counter);
}
} else {
m=m-1;
s=59;
}
//Do code for showing the number of seconds here
} else {
s = s - 1;
}
document.getElementById("timer").innerHTML=h+'hrs '+m+'min '+s+'secs ';
}
答案 0 :(得分:1)
我在这里看到的问题是,当所有时间变量时,你将h
变量减1,而时间变量我的意思是h
,{{1} }和m
设置为零:
s
所以if(s == 0 ) {
if(m == 0) {
h=h-1;
s=59;
m=59;
// more code goes here
将是h
,计时器永远不会停止
我可以提出的最好的方法是完全重写你的计时器,并在这里使用秒。每次调用-1
函数时,检查timer
是否等于零 - 如果是,则停止计时器。否则,您将s
递减1.要更新s
元素的内部HTML,您可以重新计算每次调用#timer
方法的小时数,分钟数和秒数 - 此解决方案将比嵌套条件语句链更容易理解和维护。
答案 1 :(得分:0)
问题似乎是本节中的逻辑......
if(s == 0 ){
if(m == 0){
h=h-1; // what if h is also 0 here?? this would set it negative
s=59;
m=59;
if(h == 0){
clearInterval(counter);
}
我认为你应该在递减价值之前尽快进行if(h==0)
检查。因此,您可能希望使用if (s == 0 && m == 00 && h == 0)
启动if else块并使用它来清除间隔。如果一切都已为零,则您不想再更改任何值。