setInterval动态修改延迟失效求助:部分切换场景不生效
解决setInterval动态修改延迟时长不生效的问题
你的问题核心在于每次切换时间选项时都会创建新的setInterval,但旧的定时器并未被清除,多个定时器同时运行导致新的设置被旧定时器覆盖。比如从1秒改为10秒时,之前的1秒定时器仍在持续触发,所以看起来新的10秒设置没生效。
修复方案
声明一个变量存储定时器ID,每次切换时间时先清除旧定时器,再创建新的:
// 在事件监听外部声明变量存储定时器ID let intervalId; choiseTime.addEventListener("change", (e) => { let timeSelect = e.target.selectedIndex; convertTime = timeSelect * 1000; // 清除已存在的旧定时器 if (intervalId) { clearInterval(intervalId); } // 立即更新单词,无需等待第一个周期 inter(); // 创建新定时器并保存ID intervalId = setInterval(inter, convertTime); if (timeSelect < 4) { alert.innerHTML = `En sélectionnant une durée de ${timeSelect}s vous irez sans doute trop vite. L'intervalle conseillé est de 4 à 7s par mot.`; } else { alert.innerHTML = ""; } });
关键说明
intervalId用来保存定时器的唯一标识,确保我们能精准清除旧的定时器实例。- 每次触发切换事件时先清除旧定时器,再创建新的,保证同一时间只有一个定时器在运行。
- 保留
inter()立即执行,确保切换时间后单词能马上更新,不用等待第一个间隔周期。
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

