Javascript 聚焦/模糊进展

Javascript 聚焦/模糊进展,javascript,timer,countdown,onblur,onfocus,Javascript,Timer,Countdown,Onblur,Onfocus,您好,我是javascript新手,今天在这方面很努力,但找不到解决方案。 请帮帮我 <script> if (/*@cc_on!@*/false) { document.onfocusin = startB; document.onfocusout = stopB; } else { window.onfocus = startB; window.onblur = stopB; } var x

您好,我是javascript新手,今天在这方面很努力,但找不到解决方案。 请帮帮我

<script>
    if (/*@cc_on!@*/false) {
        document.onfocusin = startB;
        document.onfocusout = stopB;
    } else {
        window.onfocus = startB;
        window.onblur = stopB;
    }

var x = 1000;
var y = 1;

function startB() {
    if (x !== 'ok') {
        x = x - y;
        document.form.num.value = x;
        timeoutID=setTimeout("startB()", 1000);
    } 
    if (x == 0) {
        x = 'ok';
        document.form.num.value = x;
    }
}

function stopB() {
clearTimeout(timeoutID);
}
</script>
<body onLoad="startB()">
<form name="form">
<input name="num" size="10" readonly="readonly" type="text"> 
</form>

如果(/*@cc_on!@*/false){
document.onfocusin=startB;
document.onfocusout=stopB;
}否则{
window.onfocus=startB;
window.onblur=stopB;
}
var x=1000;
变量y=1;
函数startB(){
如果(x!=“确定”){
x=x-y;
document.form.num.value=x;
timeoutID=setTimeout(“startB()”,1000);
} 
如果(x==0){
x=‘ok’;
document.form.num.value=x;
}
}
函数stopB(){
clearTimeout(timeoutID);
}
当我打开此页面时,它通常以1/s的值倒计时,当我更改窗口/选项卡时,它停止,我再次返回,它以1/s的速度继续,这是我想要的,但我有一个大问题-->当我转到此链接并非常快地更改窗口/选项卡时,仍处于卸载状态,它开始以onblur状态倒计时,当我回到onfocus状态时,函数被读取两次并开始倒计时1/0.5秒。。。加倍

有人能帮我吗? 提前感谢。

让startB在设置超时之前呼叫stopB。将stopB更改为:

这样,如果timeoutID已被清除(或尚未设置),它将不会抛出错误

编辑
如果在load事件发生之前导航离开页面,则计时器将在页面未获得焦点的情况下启动。如果在设置超时之前取消超时(即startB总是在调用setTimeout之前调用stopB),则不能运行两个计时器

没有,没有区别。再次,若我改变标签,直到页面加载结束,倒计时再次开始,返回后再次变为双倍。
  if (timeoutID) clearTimeout(timeoutID);