[英]My Javascript timer counting down too fast or it doesn't start onLoad
我有那个Javascript计数器:
var x=100;
function timerCountdown()
{
document.getElementById('timer1').value=x;
x--;
t=setTimeout("timerCountdown()",1000);
if (x<-1)
{
document.getElementById('timer1').value='Done!';
clearTimeout(t);
}
}
function stopCounter(){
clearTimeout(t);
x=x+1;
}
然后我用:
<body onFocus='timerCountdown()' onBlur='stopCounter()'>
但是问题是,页面加载后倒数计时不会开始。 它等待着我单击另一个窗口,然后再次聚焦于该窗口。
所以我尝试了这个:
<body onLoad='timerCountdown()' onFocus='timerCountdown()' onBlur='stopCounter()'>
但是这一次,倒计时非常快。 可能是因为timerCOuntdown每秒被调用两次。
另外,我可以只在body标签中使用onFocus和onBlur,但是我需要一个函数来在身体负荷时触发Focus。 那可能吗?
有没有人建议解决这个问题?
非常感谢!
简单的答案是因为setTimeout
被调用了两次,分别运行一次timerCountdown()
两次,并连续设置两个setTimeout
ID。
这就是您想要的:
var x = 100;
var t = 0;
function timerCountdown()
{
if (t == 0) t = setInterval(timerCountdown, 1000);
document.getElementById('timer1').value=x;
x--;
if (x < 0)
{
document.getElementById('timer1').value='Done!';
clearTimeout(t);
ticker = 0;
}
}
function stopCounter()
{
clearTimeout(t);
t = 0;
x++;
}
setInterval
更适合于倒数计时器,由于setTimeout
仅运行一次并且需要继续调用它,因此您需要连续运行。
编辑:这修复了Firefox上计时器的初始快速触发。
从<body onload=
删除处理程序,并将其添加到上面的脚本块的末尾:
t = setInterval(timerCountdown, 1000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.