Вы можете использовать CSS-анимацию, добавленную к .show
вместо обработки setInterval
.
Также ваш код может быть проще (см. Фрагмент ниже):
Обратите внимание, что я сократил время, чтобы неты ждешь 100 секунд?
var el = document.querySelector('#element');
var timer = 5000, tick = 1000;
const resetTimer = () => (timer = 5000) && el.classList.remove('show');
['load', 'touchstart', 'mousedown', 'mousemove', 'keydown', 'scroll']
.forEach(e => document.addEventListener(e, resetTimer));
setInterval(() => (timer -= tick) || el.classList.add('show'), tick);
h1:not(.show) {display: none}
.show {animation: togg 2s linear infinite alternate}
@keyframes togg {
40% {opacity:1}
50% {opacity:0}
100% {opacity:0}
}
<h1 id="element">SHOW</h1>