我有一些代码,每次有新的分钟(即,秒== 0时)都会刷新我的HTML页面。
<head>
<script>
function reload(){
location.reload();
}
function refresh(){
var d = new Date();
var s = d.getSeconds();
if (s == 0) {setTimeout(reload(), 1000)};
}
</script> </head>
<body onload="refresh(), setInterval('refresh()',1000)">
但是,当它刷新时,它会在秒== 0的时间内刷新无数次。为了防止这种情况发生,我尝试实现“ setTimeout”-因此它仅刷新一次。但是,这不起作用,并且在s == 0时它仍然刷新了无数次。是否有人还有其他想法可以防止这种情况发生?有任何问题,只问。谢谢
答案 0 :(得分:1)
对于JavaScript,您可以将其简化为:
setTimeout(() => {
window.location.reload(1);
}, 60 * 1000);
但是,一个不使用JS的非常简单的解决方案是
<meta http-equiv="refresh" content="60; URL=https://example.com/">
答案 1 :(得分:1)
通常,refreshin不是处理问题的好方法。您是否考虑过使用异步调用并使用JavaScript刷新DOM而不是重新加载整个页面?
但是,如果您想走这条路线,我会以当前的开始时间为基准,然后从这里检查是否已经过了1秒。
const t0 = performance.now();
function refresh(){
if ((performance.now() - t0) >= 1000) {
location.reload();
}
}
但是您需要调用refresh直到发生这种情况。
至于“不理解”评论,我清理了一小撮东西,并在此处添加一些解释:
第一行在所有函数之外,因此它设置了“全局”变量,因为它永远不会改变,因此我使用了余弦(而不是变量)来提高速度和可读性。它以秒为单位设置当前时间t0
const t0 = performance.now();
在您的函数中,我使用相同的命令再次获取ms,并从中减去以前保存的ms。如果新数字比原始数字大1000倍,则表示已经过去了一秒钟,它可以重新加载。
if ((performance.now() - t0) >= 1000) {...
答案 2 :(得分:1)
如果我理解正确,则您不想在加载1分钟后刷新,而是在秒= 0时刷新。
您不必经常通过间隔调用刷新功能。
我们目前排名第二。因此,如果我们从分钟中减去,我们可以找到剩余的秒到新的分钟。
60 - d.getSeconds();
然后转换为毫秒,设置超时时间,页面将在新的一分钟被完全刷新。
setTimeout(function() { location.reload() }, 1000 * (60 - d.getSeconds()));
如果如此重要,您可以考虑使用d.getMilliseconds()