Использование setTimeout
setTimeout
добавляет событие в стек. И ваш пример будет пытаться вызвать каждый сразу после 1 с. Итак, вам нужно самостоятельно управлять предполагаемым временем выполнения:
setTimeout(() => { document.title = "Hold on."; }, 1000);
setTimeout(() => { document.title = "Hold on.."; }, 2000); // <-- increase
setTimeout(() => { document.title = "Hold on..."; }, 3000); // <-- increase
Looping setTimeout
Если требуется setTimeout
(по любой причине), лучше вызвать рекурсивно функция и встроить это в функцию тайм-аута. Это показано ниже:
let time = 0;
loop(time);
function loop(time){
setTimeout(() => {
message.textContent = "Hold on" + '.'.repeat(time%3+1);
loop(time+=1000) // <-- recursive call that also increments time
}, 1000);
}
<div id="message"></div>
Использование setInterval
setInterval
устраняет некоторые проблемы управления временем, особенно если выполнение должно происходить в регулярной последовательности , Ниже показан непрерывный интервал l oop.
let period_count = 0;
setInterval(function() {
let message = 'Hold on' + '.'.repeat( period_count++%4 );
document.querySelector('#message').textContent = message;
}, 1000);
<div id="message"></div>
Прекращение выполнения
Разница между setInterval
и setTimeout
заключается в том, что интервал будет выполняться до его остановки. Ниже показано, как его можно остановить с помощью тела l oop:
let period_count = 1;
let interval = setInterval(function() {
if ((period_count) == 3)
clearInterval(interval)
let message = 'Hold on' + '.'.repeat(period_count++);
document.querySelector('#message').textContent = message;
}, 1000);
<div id="message"></div>