繁体   English   中英

我的Javascript计时器倒计时太快或无法启动onLoad

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM