如何用JavaScript实现25秒与10秒循环交替倒计时?
修复循环倒计时逻辑问题
你的代码存在两个核心问题,导致只会持续循环10秒倒计时:
- 初始状态未给
localStorage.endTime设置初始值,首次执行时remaining为负数,直接进入else分支触发10秒倒计时,从此陷入该循环。 - 倒计时结束后缺少阶段切换逻辑,仅固定调用
tensecond(),无法回到25秒阶段。
以下是修复后的完整代码:
var interval = 25000; var interval1 = 10000; function millisToMinutesAndSeconds(millis) { var seconds = ((millis % 60000) / 1000).toFixed(0); return (seconds < 10 ? "0" : "") + seconds; } // 初始化倒计时:如果没有endTime,启动25秒倒计时并标记阶段 if (!localStorage.endTime) { localStorage.endTime = +new Date() + interval; localStorage.currentPhase = "work"; // work对应25秒,break对应10秒 } function switchPhase() { var currentPhase = localStorage.currentPhase; if (currentPhase === "work") { // 从25秒切换到10秒 localStorage.endTime = +new Date() + interval1; localStorage.currentPhase = "break"; } else { // 从10秒切换回25秒 localStorage.endTime = +new Date() + interval; localStorage.currentPhase = "work"; } } setInterval(function () { var remaining = localStorage.endTime - new Date(); if (remaining >= 0) { document.getElementById("timer").innerText = millisToMinutesAndSeconds(remaining); } else { // 倒计时结束后切换阶段 switchPhase(); } }, 100);
关键修改说明:
- 新增
localStorage.currentPhase标记当前倒计时阶段,区分25秒(work)和10秒(break)状态。 - 初始化时检查
localStorage.endTime,不存在则默认启动25秒倒计时,确保首次运行从25秒开始。 - 替换原有的
tensecond()和reset()为switchPhase()函数,根据当前阶段自动切换到对应时长的倒计时,实现循环往复的逻辑。
内容的提问来源于stack exchange,提问作者kennedyforf
相关产品推荐
相关产品推荐

