Розфарбуйте годиник за допомогою setInterval
Створіть кольоровий годинник як у цьому прикладі:
Використовуйте HTML/CSS для стилізації, JavaScript лише оновлює час в елементах.
Спочатку, напишемо HTML/CSS.
Кожен компонент часу обгорнемо у <span>
:
<div id="clock">
<span class="hour">hh</span>:<span class="min">mm</span>:<span class="sec">ss</span>
</div>
Розфарбуємо кожен <span>
за допомогою CSS.
Функція update
оновлюватиме годинник, а метод setInterval
викликатиме її щосекунди.
function update() {
let clock = document.getElementById('clock');
let date = new Date(); // (*)
let hours = date.getHours();
if (hours < 10) hours = '0' + hours;
clock.children[0].innerHTML = hours;
let minutes = date.getMinutes();
if (minutes < 10) minutes = '0' + minutes;
clock.children[1].innerHTML = minutes;
let seconds = date.getSeconds();
if (seconds < 10) seconds = '0' + seconds;
clock.children[2].innerHTML = seconds;
}
В рядку (*)
ми щоразу перевіряємо поточну дату. Виклики setInterval
не надійні: вони можуть відбуватися з затримкою.
Функція для управління годинником:
let timerId;
function clockStart() { // увімкнути годинник
if (!timerId) { // встановити новий інтервал, якщо годинник не увімкнений
timerId = setInterval(update, 1000);
}
update(); // (*)
}
function clockStop() {
clearInterval(timerId);
timerId = null; // (**)
}
Будь ласка, зверніть увагу, що виклик update()
не тільки заплановано в clockStart()
, а ще й негайно виконується в рядку (*)
. Інакше відвідувач повинен був би чекати до першого виконання setInterval
. І до того часу годинник був би порожнім.
Також важливо встановити новий інтервал у clockStart()
лише тоді, коли годинник не працює. Інакше натискання кнопки «Пуск» кілька разів встановить кілька одночасних інтервалів. Ще гірше – ми запам’ятаємо лише timerID
останнього інтервалу, втративши посилання на всі інші. В такому разі ми б ніколи більше не змогли зупинити годинник! Зауважте, в рядку (**)
нам потрібно очистити timerID
, коли годинник зупинено, щоб його можна було знову увімкнути, запустивши clockStart()
.