您好我是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>
当我打开这个页面时,它会以1 /秒的值正常倒计时,当我更改窗口/标签时它停止,我再次回来它继续1 /秒,这是我想要的,但我有一个大问题 - - &GT;当我转到此链接并非常快速地更改窗口/标签时,它仍然被卸载,它开始在onblur状态下倒计时,当我回到onfocus状态时,该功能被读取两次并开始倒计时1 / 0.5秒。 ..双倍。
任何人都可以帮我吗? 提前谢谢。
答案 0 :(得分:0)
在设置超时之前,让 startB 调用 stopB 。将 stopB 更改为:
if (timeoutID) clearTimeout(timeoutID);
因此,如果timeoutID已被清除(或尚未设置),则不会抛出错误。
如果您在加载事件发生之前离开页面,那么计时器将启动而页面无法获得焦点。如果在设置之前取消超时(即startB 始终在调用setTimeout之前调用stopB),则不能运行两个定时器。