我的Javascript计时器倒数太快,或者在加载时无法启动
我有一个Javascript计数器:我的Javascript计时器倒数太快,或者在加载时无法启动,javascript,timer,onload,Javascript,Timer,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!'; clea
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,但我需要一个函数来触发身体负荷时的焦点。可能吗
有人有解决这个问题的建议吗
非常感谢 简单的答案是因为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++;
}
那么...怎么样如果加载了Focus='timerCountdown',为什么会有它呢?我不知道它到底在做什么,c-应该会抛出错误。嗨,因为我想在重新关注计时器页面后,计时器恢复。糟糕,它是x而不是c。刚刚更正了,非常感谢你的回复。它起作用了,但奇怪的事情发生了:在头两秒钟,倒计时的速度是原来的两倍。我在一秒钟内从100到98。不太清楚为什么会这样。你知道它为什么这么做吗?谢谢lot@eric01这可能是浏览器对事件的处理。使用您现有的代码,这个问题发生在Firefox上,而不是Chrome上。尝试我在上面编辑的建议更改。请注意,这些计时器本质上是不可靠的,因此根据浏览器的操作,它可能会加速或减慢。非常感谢。我真的不明白为什么,但这已经奏效了。谢谢,regards@eric01不客气!如果对你有帮助的话,请做;
t = setInterval(timerCountdown, 1000);