ToolAct工具行动

倒计时器

创建倒计时,支持自定义时间和声音提醒

设置时间

00:05:00

什么是倒计时器?

倒计时器是一种从指定时长开始递减到零的时间控制工具,适合专注学习、厨房烹饪、运动间歇、课堂活动、会议控时、演讲排练等需要固定时间盒的场景。它和秒表不同:秒表从零开始向上记录已经过去多久,而倒计时强调“还剩多久”和“什么时候结束”。清晰的剩余时间能帮助人控制节奏,避免拖延或超时。本页面还提供秒表和多计时器模式,可同时满足计次、分段和多个小任务并行计时。需要注意,计时依赖当前打开的浏览器标签页,重要提醒时应保持页面可用。

使用方法

使用方法

  1. 选择模式:倒计时、秒表或多计时器
  2. 倒计时模式:输入时/分/秒或点击预设时间
  3. 点击「开始」启动计时,点击「暂停」可暂停
  4. 倒计时结束时播放提示音

计时说明

  • 浏览器计时器在标签页后台、设备休眠或省电模式下可能会暂停或产生偏差。
  • 用于会议、考试或生产作业时,请以系统时钟或专用计时器为准。

使用场景

运行带声音提示的简单倒计时设置小时、分钟和秒数,使用快速预设,启动或暂停计时器,倒计时归零时浏览器会播放短促的提示音。目标时长仅保存在页面的本地状态中,因此医疗预约、考试窗口或惊喜活动等私密截止时间在计时器运行期间不会传输到任何服务器。
使用秒表进行分段计时和节奏控制切换到秒表模式,为练习轮次、演讲、锻炼或实验计时,记录分段时间,显示总用时和分段差异,突出最佳和最差分段。当节奏控制比固定倒计时终点更重要时非常实用。
在同一页面管理多个独立计时器烹饪、工作坊、学习时段、测试或直播需要各自独立的计时器时,使用多计时器模式,每个计时器可独立启动、暂停、重置或删除。将它们集中在一页上减少多个短任务同时进行时的混乱,页面无需登录或同步即可在单次会话中保持运行状态。
保持标签页可见以确保提示音正常触发浏览器会节流后台计时器,长时间倒计时时请保持页面可见或在前台标签页中,正式用于考试、演讲或烹饪前先用短时间(如 10 秒)测试。setInterval 每分钟漂移数十毫秒,而 requestAnimationFrame 驱动的循环仅受显示抖动影响,短时间倒计时用 setInterval 即可,但长达 60 分钟的考试计时器在可见标签页上使用无漂移循环效果更好。
使用预设替代手动输入时分秒当持续时间为标准值时,选择番茄钟、考试或 HIIT 预设,让计时器设置与实际使用的方法匹配,避免 24 分钟与 25 分钟的偏差破坏番茄钟节奏。移动设备上 Safari、Chrome Android 和 Firefox 的标签页节流是后台计时器延迟触发或跳过的最常见原因,重要事件请固定标签页并保持设备唤醒,正式使用前先做五秒空运行测试。

技术原理

倒计时引擎不使用 setInterval(callback, 1000) 作为权威时钟——这种方式会累积漂移,因为 HTML5 事件循环规范只保证最小延迟,而非固定节奏。取而代之的是,页面通过 Date.now()(或使用 performance.now() 获得亚毫秒级精度)记录 startTime,每次 tick 计算 remaining = targetDuration - (Date.now() - startTime)。显示刷新由 requestAnimationFrame 驱动,浏览器将其限制为显示器的 vsync 刷新率(通常为 60 Hz / 16.67 毫秒,高刷新率笔记本和手机上有时为 120 Hz)。这种自校正设计即使在 JavaScript 任务队列因垃圾回收或长时间布局而阻塞时,也能保持显示的秒数与实际时钟同步。 后台节流是计时器意外的主要来源。根据 HTML 活动标准,隐藏标签页会将 setInterval/setTimeout 的最小间隔限制为 1000 毫秒(Chrome、Firefox、Safari 各自使用不同的启发式实现;Chrome 在电池供电约 5 分钟后还会冻结非活动标签页)。Page Visibility API(document.visibilityState、document.hidden、visibilitychange 事件)让计时器能够检测标签页切换,并在标签页重新可见时根据 Date.now() 校准内部时钟。倒计时结束的提示音通过 Web Audio API 播放(AudioContext + OscillatorNode 或预加载的 AudioBuffer),在 iOS Safari 和现代 Chrome 上需要先通过用户手势激活以满足自动播放策略。同时还会渲染可视提醒作为辅助手段,如果用户之前已授予权限,还可通过 Notification API 发送操作系统级的桌面通知。 多计时器模式将每个计时器保存在独立的状态对象中,各自拥有独立的 startTime;单个 requestAnimationFrame 循环每帧遍历整个数组,而非为每个计时器启动独立的 interval,这使得 CPU 工作量随计时器数量增加保持平稳。跨页面刷新的持久化使用 localStorage 存储序列化的 endTime,因此页面可以在挂载时重新计算剩余时间。需要注意的是,操作系统的时钟校正(手动修改时间、NTP 阶跃调整或夏令时切换)会瞬间改变 Date.now() 的值,可能导致恢复后的计时器出现跳变——performance.now() 是单调的,在单次页面加载内仅关注经过时间时更为适用。

  • 使用 Date.now() 或 performance.now() 作为时间基准;永远不要依赖累积的 setInterval 计数。
  • requestAnimationFrame 将重绘频率限制为显示器 vsync(60 Hz ≈ 16.67 毫秒;120 Hz ≈ 8.33 毫秒)。
  • 隐藏标签页按 HTML 规范将 setInterval 节流至最低 1000 毫秒;Chrome 在电池供电约 5 分钟后可能冻结页面。
  • Page Visibility API(visibilitychange 事件)是标签页返回前台时校准计时器的钩子。
  • Web Audio API 在 iOS Safari 和 Chrome 上需要先通过用户手势激活,以满足自动播放策略。
  • Notification API 需要 Notification.requestPermission() 和安全上下文(HTTPS 或 localhost)。
  • performance.now() 在 NTP 调整和夏令时跳变时是单调的;Date.now() 则不是——请根据需求选择。

示例

番茄工作法(25 分钟专注 + 5 分钟休息)

模式  :倒计时
时长  :00 : 25 : 00
开始  :14:00:00
结束  :14:25:00(响铃)
下一步:5 分钟休息计时(预设)

做菜 —— 溏心蛋(6 分 30 秒)

模式  :倒计时
设置  :00 : 06 : 30
剩 1:00 -> 视觉提示高亮显示剩余时间
到 0:00 -> 响铃 + 页面横幅提示:倒计时结束!

分段秒表(1 公里跑步训练)

开始    -> 00:00.00
第 1 圈 -> 04:12.80   (单圈 04:12.80)
第 2 圈 -> 08:31.45   (单圈 04:18.65)
第 3 圈 -> 12:48.10   (单圈 04:16.65)
冲线    -> 16:55.30   (单圈 04:07.20  最快圈)

多计时器做 HIIT(30 秒训练 / 15 秒休息 x 4)

计时 A:00:30(训练)-> 响铃
计时 B:00:15(休息)-> 响铃
计时 C:00:30(训练)-> 响铃
计时 D:00:15(休息)-> 响铃
整段 3 分钟,记得让标签页保持可见,确保提示音准时响起。

考试监考 —— 45 分钟笔试

时长:00 : 45 : 00
开始:09:15:00
结束:10:00:00
提示:让标签页保持在前台 —— 后台标签可能会限速 setInterval,
45 分钟内可能会偏差好几秒。

常见问题

切换标签页之后倒计时还会继续吗?

现代浏览器会限制后台标签页的更新频率,大约每秒一次以节省电量,所以切回来时显示的数字可能会短暂滞后——但底层计算基于绝对时间,因此累计经过的时间是准确的。一旦切回来,显示的倒计时会立刻跳到正确的值。

标签页在后台时闹铃还会响吗?

部分浏览器和操作系统的省电设置会限制后台标签页的音频播放。闹铃通过 Web Audio API 播放,且需要事先有过用户交互。如果你在意能否听到提醒,请保持标签页处于前台或可见状态。

电脑进入睡眠会怎样?

倒计时底层基于 Date.now()(即墙上时钟)做时间运算,因此在系统睡眠期间也能正确推进。唤醒后显示会自动追上。但在系统挂起期间,闹铃声音不会响起。

计时器的精度有多高?

显示每秒刷新一次,但内部使用毫秒级时间戳。实际精度受限于浏览器的标签页限流(后台标签页精度会下降),以及闹铃声音的音频输出延迟(通常小于 100 毫秒)。如果你需要物理或音频工程级别的精度,请使用专门的硬件。

能保存预设时长吗?

页面提供了几个常用时长的快捷预设按钮(5 分钟、10 分钟、25 分钟、45 分钟、1 小时)。这些是内置快捷方式,不可由用户自定义。关闭标签页会丢失当前的计时器状态。

夏令时怎么处理?

倒计时使用的是经过的秒数,而非墙上日期,因此夏令时切换不会对它造成影响。在「春季前调」前 30 分钟启动的 2 小时倒计时,依然会在 90 分钟后正确结束。

有任何数据会被上传吗?

不会。计时器完全在浏览器中运行。如果你选择启用,自定义预设和历史记录会保存在本地。