我正在尝试使用setTimeout。我希望它每隔五秒执行一次,但不会在调用setTimeout时立即执行。我无法让它发挥作用:
firsttime = true;
window.setTimeout(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
答案 0 :(得分:6)
在您window.location.reload()
页面后,所有JavaScript变量和计时器都会丢失。第二次加载页面时,firsttime
再次为true
。
所以你要做的是:当用户第一次进入页面时,在10秒后刷新它。然后每5秒刷新一次。问题是:HTTP是statelss,每次用户进入页面时,第一次 。中间没有记忆或状态。
你能做的是:
使用Cookie或HTTP会话记住用户已进入该页面。第一次使用setTimeout()
10秒。在该页面上的每个后续条目中,您使用5秒(setInterval()
在这里毫无价值)
输入first.html
等待10秒后重定向到second.html
。相同,但硬编码5秒延迟。查询参数或哈希标记也可用于持久化状态。虽然有点hacky。
偶尔刷新整个页面就是2000-ish。考虑ajax和部分DOM更新。
答案 1 :(得分:3)
setTimeout
只运行一次。
setInterval
每隔X毫秒运行一次。
firsttime = true;
window.setInterval(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
答案 2 :(得分:2)
您正在寻找setInterval。它采用相同的参数,但每X秒执行一次回调,而不是一次。
答案 3 :(得分:2)
setTimeout
只运行一次,此时条件(!firsttime)
不成立(firsttime
为true
,所以没有任何反应。
你可以留下这张支票。该功能将不立即加载。第一次执行将在指定的延迟之后执行。
如果您正在寻找重复执行,请检查setInterval
。但是您应该意识到window.location.reload();
重新加载整个页面,包括其中的JavaScript,因此它只能执行一次(然后重新加载页面,清除间隔并重新初始化JS,使用另一个超时实例)。
在您的情况下,HTML刷新会更有用:
<meta http-equiv="refresh" content="5;url=yourwebpage">
答案 4 :(得分:1)
if (!firsttime) {
window.location.reload();
}
firsttime = false;
这只会执行一次因为你在5秒内调用超时:
window.setTimeout(function () {
}, 5 * 1000);
当你希望它每5秒钟继续执行时;使用setInterval:
firsttime = true;
window.setInterval(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
但是;使用10秒的setTimeout就足够了:
window.setTimeout(function () {
window.location.reload();
}, 10 * 1000);
因为当页面重新加载时,变量firsttime将重置为true