You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript实现25秒与10秒循环交替倒计时?

修复循环倒计时逻辑问题

你的代码存在两个核心问题,导致只会持续循环10秒倒计时:

  1. 初始状态未给localStorage.endTime设置初始值,首次执行时remaining为负数,直接进入else分支触发10秒倒计时,从此陷入该循环。
  2. 倒计时结束后缺少阶段切换逻辑,仅固定调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:05:31