Замени дебильный setInterval на requestAnimationFrame, как я тебе показал. Если ты не понимаешь или не любишь работать с современными подходами, то с тем же успехом можно прописать setTimeout(time, 500) внутри функции. Это лучше, чем интервал.
Только надо еще дописать условия появления, типа такого, если без привязки к классам... но лучше все же работать с классами, а не атрибутом style.
00:00:00
Показать часы
const clock = document.getElementById('clock');
const button = document.querySelector('.showTimeButton');
button.addEventListener('click', () => {
getComputedStyle(clock).display === 'block' ?
clock.style.display = 'none' :
clock.removeAttribute('style');
});
(time = () => {
let d = new Date();
let h = d.getHours();
let m = d.getMinutes();
let s = d.getSeconds();
h = h % 100 < 10 ? '0' + h : h;
m = m % 100 < 10 ? '0' + m : m;
s = s % 100 < 10 ? '0' + s : s;
clock.textContent = `${h}:${m}:${s}`;
requestAnimationFrame(time);
// setTimeout(time, 500); // Альтернативный вариант, результат тот же
})();
Как видно из примера, тебе не нужно условия появления прописывать внутри функции, ибо запущенная один раз функция будет работать, пока не остановишь дополнительными условиями. Но часы останавливать нет смысла, поэтому функцию часов вообще можно не трогать.