Постановка задачи
Часто в работе возникает потребность жестко выдерживать тайминг при заслушивании серии докладов: при защите проектов, программ развития, дипломных работ и прочее. Если в повестке дня какого-либо мероприятия 10+ докладчиков, то без строгого соблюдения регламента невозможно не выбиться из графика. Как правило, это приводит к тому, что запланированное время мероприятия увеличивается кратно. А докладчикам, выступающим последними, фактически не достаётся должного внимания.
Обычно формат подобных защит подразумевает непосредственно сам доклад, ответы на вопросы комиссии, иногда сразу обсуждение (но чаще оно проходит в закрытом формате после заслушивания всех докладов). В такой ситуации важно чётко следить за временем. Прошерстив интернет, пересмотрев десятки онлайн-таймеров и десктопных приложений, я не нашел ничего подходящего. Таймера, имеющего автоматическое следование в несколько фаз (этапов) лично мне не удалось найти. Поэтому я решил разработать его сам.
"Техзадание" выглядело следующим образом.
Перед запуском у пользователя имеется возможность задать три параметра:
Время доклада (по умолчанию 5 минут);
Время ответов на вопросы (по умолчанию 7 минут);
Время обсуждения (по умолчанию 3 минуты).
В системе имеются кнопки "Старт", "Пауза", "Стоп", "Далее".
При нажатии кнопки "Старт" начинается обратный отсчет от "времени доклада". Цифры очень крупные, на весь экран, зеленого цвета. По окончании этого времени автоматически запускается обратный отсчет "времени ответа на вопросы". При этом цифры становятся желтого цвета. По окончании этого этапа автоматически запускается обратный отчет от заданного "времени обсуждения" (красным цветом).
При нажатии кнопки "Пауза" на любом этапе отсчет просто останавливается и продолжается при повторном нажатии кнопки "Старт"/ "Продолжить". При нажатии кнопки "Стоп" весь отсчет сбрасывается на заданное время. При нажатии кнопки "Далее" происходит переход на следующую фазу отсчета (во время отсчета времени обсуждения кнопка "Далее" не активна).
Описание решения
Реализовал решение на связке HTML + JavaScript.
Ввел три состояния таймера:
// Состояние таймера
let timer = null;
let isRunning = false;
let isPaused = false;
let currentPhase = 0; // 0 - доклад, 1 - вопросы, 2 - обсуждение
let timeLeft = 0; // В секундах
// Цвета и названия фаз
const phases = [
{ name: 'Доклад', className: 'presentation' },
{ name: 'Ответы на вопросы', className: 'questions' },
{ name: 'Обсуждение', className: 'discussion' }
];
Обновление отображения времени реализовано следующим образом:
// Обновление отображения
function updateDisplay() {
const minutes = Math.floor(timeLeft / 60);
const seconds = timeLeft % 60;
timeDisplay.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
phaseLabel.textContent = phases[currentPhase].name;
timeDisplay.classList.remove('presentation', 'questions', 'discussion');
phaseLabel.classList.remove('presentation', 'questions', 'discussion');
timeDisplay.classList.add(phases[currentPhase].className);
phaseLabel.classList.add(phases[currentPhase].className);
}
Результат
Перед запуском отсчета пользователю предлагается настроить время каждой фазы.

В процессе работы отображается оставшееся время, название фазы, статус отсчета:

Кнопка "Далее" служит для оперативного переключения между фазами. Модератору становится сильно проще переключаться между этапами, а всем участникам мероприятия понятно, что происходит в конкретный момент.

Последнюю фазу "обсуждение доклада" сделал опциональной. Не всегда на мероприятиях комиссия обсуждает доклад сразу по его окончанию. Зачастую это происходит наедине, без присутствия участников.

Ознакомиться с работой таймера можно по ссылке: https://epasusu.github.io/report_timer/
Полный репозиторий кода: https://github.com/epasusu/report_timer.git
Комментарии (6)

nikolz
10.12.2025 04:44До кучи,
Это программа таймеров, каждый из которых может стартовать после остановки предыдущего.
Можно сделать больше трех.
https://apps.microsoft.com/detail/9wzdncrcsqsz?hl=ru-ru&gl=CA



belousovev Автор
10.12.2025 04:44Такой я видел. Насколько мне помнится, там нельзя сделать на весь экран отсчет. Докладчику, как правило, нужно ориентироваться на время, чтобы отсчет шел на отдельном экране, был хорошо виден "боковым" зрением.

DenEr95
10.12.2025 04:44Полезно - маленький, ясный таймер для серийных докладов - не революция, но радует простотой и честностью: удобно, что не нужно лишнего ПО и интерфейс сразу понятен.
Ozulon
1) При изменении размеров окна браузера некорректно меняется размер таймера, из за чего минуты не всегда помещаются:
2) Нажимаем на кнопку "Пауза", потом нажимаем на "Продолжить", таймер продолжает работу, но на паузу уже не ставится, хотя надпись зеленой кнопки меняется.
3) При многократном нажатии на "Пауза" таймер начинает некорректно отсчитывать время, секунды начинают отсчитываться быстрее в несколько раз.
Браузер Edge.
belousovev Автор
Спасибо! Поправлю.