这里为什么用 25 分钟一段
25 分钟专注加 5 分钟休息是番茄工作法里最常见的配比,每完成四段进一次 15 分钟长休息。上面三个时长都可以改 —— 25 这个数字本身没什么魔力, 重要的是「一段有明确终点的工作」和「一段真的离开屏幕的休息」。改完会 立刻按新时长重开当前这一段,不会被当成同一轮继续跑。
计时为什么不用 setInterval 累加
大多数网页计时器的写法是每秒减一。这个写法的前提是「定时器每秒都会被 准时叫醒一次」,而浏览器并不保证这一点:非活动标签页里的定时器会被 降频,可能降到每秒一次甚至更低。于是你切走十分钟再回来,累加式的计时器 已经落后了十几秒,而它自己毫无察觉。
这里的做法是反过来的:开始计时时只记下一个结束时刻(当前时间加总时长), 之后每次刷新都重新算一次「结束时刻减现在」。定时器只负责触发这次重算, 不参与计时本身 —— 所以它被降频多少次都不影响读数。
刷新页面为什么不会丢进度
因为存进浏览器本地存储的是那个结束时刻,而不是「还剩多少秒」。重新打开 页面时拿当前时间跟它一对账,就知道真实剩余时间 —— 中间页面关掉多久都算数。 如果关得太久、对账下来已经过期,它会直接把这一段判定为结束并进入下一段, 而不是停在那里显示一个负数。
提示音与桌面通知
提示音是用 Web Audio 现场合成的,页面不加载任何音频文件。浏览器要求音频 必须在用户操作里初始化,所以第一次点「开始」时才建立音频通道;如果你 一进页面什么都不点,到点时不会有声音,计时逻辑本身不受影响。
桌面通知默认不开,需要手动点一下才会向浏览器申请权限 —— 页面加载时不会 主动弹权限框。拒绝之后在浏览器设置里可以改回来。
数据存在哪里
只存在你这台设备的浏览器本地存储里,不会发送到任何服务器。换设备或清除 浏览器数据后,进度和设置都会回到默认值。