Таймер обратного отсчета
Создание обратного отсчёта с настраиваемым временем и напоминаниями
Установить время
Что такое таймер обратного отсчёта?
Таймер обратного отсчета начинает работу с заданной длительности и считает время до нуля. Он полезен для сосредоточенной работы, готовки, спортивных интервалов, занятий, совещаний, выступлений и любых задач, где важен фиксированный временной блок. В отличие от секундомера, который измеряет прошедшее время от нуля, обратный отсчет показывает, сколько осталось и где находится конец задачи. Это помогает держать темп, вовремя завершать работу и не выходить за лимит. На странице также есть секундомер и режим нескольких таймеров, поэтому ее можно использовать для кругов, этапов и параллельных задач. Так как таймер работает в открытой вкладке браузера, для важных напоминаний вкладку лучше не закрывать.
Как использовать
Как использовать
- Выберите вкладку: Обратный отсчёт, Секундомер или Мульти-таймер
- Для обратного отсчёта: введите часы, минуты и секунды или выберите готовое значение
- Нажмите «Старт», чтобы запустить таймер, и «Пауза», чтобы приостановить его
- По окончании обратного отсчёта прозвучит звуковой сигнал
Советы по работе с таймером
- Таймеры в браузере могут останавливаться или отставать, если вкладка свёрнута, устройство ушло в сон или включён режим экономии энергии.
- Для встреч, экзаменов или ответственных задач используйте системные часы или отдельный таймер как основной ориентир.
Применение
Технический принцип
Движок обратного отсчёта не использует setInterval(callback, 1000) как авторитетный источник времени — этот подход накапливает дрейф, поскольку спецификация HTML5 event-loop гарантирует только минимальную задержку, а не фиксированную частоту. Вместо этого страница фиксирует startTime через Date.now() (или performance.now() для субмиллисекундного разрешения) и при каждом тике вычисляет remaining = targetDuration - (Date.now() - startTime). Обновление дисплея управляется requestAnimationFrame, который браузер ограничивает частотой вертикальной синхронизации (обычно 60 Гц / 16,67 мс, иногда 120 Гц на ноутбуках и телефонах с высокой частотой обновления). Такая самокорректирующаяся конструкция удерживает отображаемые секунды синхронизированными с реальным временем даже после остановок очереди задач JavaScript на сборку мусора или длительный layout. Фоновое ограничение таймеров — главный источник неожиданностей. По HTML Living Standard скрытые вкладки ограничивают 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 перебирает массив каждый кадр вместо запуска отдельного интервала на каждый таймер, что поддерживает постоянную нагрузку на процессор при росте числа таймеров. Сохранение между перезагрузками использует localStorage с сериализованным endTime, поэтому страница может пересчитать оставшееся время при монтировании. Учтите, что корректировки системных часов ОС (ручное изменение времени, шаг NTP или переход на летнее/зимнее время) мгновенно сдвигают Date.now() и могут вызвать скачок восстановленного таймера — performance.now() монотонен и предпочтителен, когда важно только прошедшее время в рамках одной загрузки страницы.
- Используйте Date.now() или performance.now() как единственный источник истины; никогда не доверяйте накопленным тикам setInterval.
- requestAnimationFrame ограничивает перерисовку частотой вертикальной синхронизации (60 Гц = ~16,67 мс; 120 Гц = ~8,33 мс).
- Скрытые вкладки ограничивают setInterval минимальной задержкой 1000 мс по спецификации HTML; Chrome может заморозить страницу примерно через 5 минут от батареи.
- Page Visibility API (событие visibilitychange) — это хук для сверки таймера при возврате вкладки на передний план.
- Web Audio API требует предварительной активации пользовательским жестом в iOS Safari и Chrome для удовлетворения политики автовоспроизведения.
- Notification API требует Notification.requestPermission() и безопасного контекста (HTTPS или localhost).
- performance.now() монотонен при шагах NTP и переходах DST; Date.now() — нет, выбирайте с учётом этой особенности.
Примеры
Помодоро-блок (25 мин работы + 5 мин перерыв)
Режим : Обратный отсчёт
Длительность: 00 : 25 : 00
Старт : 14:00:00
Финиш : 14:25:00 (звучит сигнал)
Далее : таймер 5-минутного перерыва (предустановка)Кулинария — яйцо всмятку (6 мин 30 с)
Режим : Обратный отсчёт
Задано : 00 : 06 : 30
На 1:00 -> визуальное предупреждение подсвечивает оставшееся время
На 0:00 -> сигнал и баннер на странице: Countdown Complete!Секундомер с кругами (тренировка 1 км)
Старт -> 00:00.00
Круг 1 -> 04:12.80 (split 04:12.80)
Круг 2 -> 08:31.45 (split 04:18.65)
Круг 3 -> 12:48.10 (split 04:16.65)
Финиш -> 16:55.30 (split 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 на него не влияют. Двухчасовой обратный отсчёт, начатый за 30 минут до перевода стрелок «вперёд», всё равно корректно завершится через 90 минут.
Загружается ли что-либо куда-либо?
Нет. Таймер работает целиком в вашем браузере. Пользовательские пресеты и история сохраняются локально, если вы это включите.