如何设置JS倒计时计时器仅在指定两个页面生效,不影响其他页面
问题根源
- 你的JS代码是全局引入的,所有页面加载后都会执行,就算页面没有
#countdown元素,末尾的全局重载定时器也会生效,导致所有页面到时间都会自动刷新 - 原有代码逻辑存在错误:倒计时结束后的
setTimeout()是空调用没有实际作用,反而全局定义的51秒强制重载定时器和你需求的「倒计时到0后延迟4秒重载」逻辑不符
修正方案
你可以先判断当前页面是否为指定的两个页面、且页面存在倒计时容器元素,再启动倒计时逻辑,修正后的代码如下:
/* 仅在指定页面运行的quiz倒计时器 */ // 替换成你需要启用倒计时的两个页面的路径,比如['/test1.html', '/quiz/quiz2.html'] const allowedPages = ['/页面1路径', '/页面2路径'] const currentPath = window.location.pathname // 只有当前页面在允许列表、且存在倒计时容器时才执行逻辑 if (allowedPages.includes(currentPath) && document.getElementById('countdown')) { let timeRemaining = 45 const downloadTimer = setInterval(() => { document.getElementById('countdown').innerHTML = `${timeRemaining}<br> 剩余秒数` timeRemaining -= 1 if (timeRemaining <= 0) { clearInterval(downloadTimer) document.getElementById('countdown').innerHTML = "<strong>时间到!</strong> <br> 测验<br> 将在4秒后重置" // 倒计时结束后延迟4秒重载页面,重载后自动回到顶部 setTimeout(() => { window.location.reload() window.scrollTo(0,0) }, 4000) } }, 1000) }
HTML代码无需修改:
<div id="countdown"></div>
使用说明
只需要把代码里allowedPages数组的内容替换为你需要启用倒计时的两个页面的实际路径即可,其余页面因为不满足判断条件,不会运行倒计时逻辑,也不会被强制重载。
内容的提问来源于stack exchange,提问作者commandoChicken
相关产品推荐
相关产品推荐

