線上倒數計時器
建立倒數計時,支援自訂時間和提醒
設定時間
什麼是倒數計時器?
倒數計時器是一種從指定時長開始遞減到零的時間控制工具,適合專注學習、廚房烹飪、運動間歇、課堂活動、會議控時、演講排練等需要固定時間盒的情境。它不同於秒錶:秒錶從零開始往上記錄已經過多久,而倒數計時強調「還剩多久」與「何時結束」。清楚的剩餘時間能協助控制節奏,避免拖延或超時。本頁也提供秒錶與多計時器模式,可處理計次、分段與多個小任務並行計時。需要注意,計時依賴目前開啟的瀏覽器分頁,重要提醒時應保持頁面可用。
使用方式
使用方法
- 選擇分頁:倒數計時、碼表或多計時器模式
- 倒數計時:輸入時/分/秒或點選預設時間
- 點選「開始」開始計時,點選「暫停」暫停
- 倒數結束時會播放聲音提醒
計時須知
- 當分頁在背景、裝置進入休眠或啟用省電模式時,瀏覽器計時器可能會暫停或產生誤差。
- 會議、考試或正式作業中,請以系統時鐘或專用計時器為最終參考。
使用場景
技術原理
倒數引擎不使用 setInterval(callback, 1000) 作為權威時鐘——這種方式會累積漂移,因為 HTML5 事件迴圈規範只保證最小延遲,而非固定節奏。取而代之的是,頁面透過 Date.now()(或使用 performance.now() 取得次毫秒解析度)記錄 startTime,並在每個計時點計算 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 毫秒)。
- 隱藏分頁的 setInterval 根據 HTML 規範被節流至最小 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 小時)。它們是內建的快速鍵,不能由使用者自訂。關閉分頁會遺失目前的計時狀態。
日光節約時間(DST)會影響嗎?
倒數依據經過秒數而非日曆時間,因此 DST 切換不會影響它。在 DST「春天往前撥」前 30 分鐘啟動的 2 小時倒數,仍會在 90 分鐘後正確結束。
有任何資料會上傳嗎?
不會。計時器完全在你的瀏覽器中執行。如果你選擇開啟,自訂預設與紀錄會儲存在本機。