Задать вопрос
@HellWalk

Как реализовать выполнение нескольких функций с задержкой?

Есть несколько функций, их количество может меняться, необходимо, чтобы каждая из них выполнялась с определенной задержкой.

Если сделать так:

<h1 id="h1">Этот заголовок меняет цвет</h1>
    <script>
        window.onload = function(){
            setTimeout(Red, 1000);
            setTimeout(Green, 1000);
            setTimeout(Blue, 1000);
        }

        function Red() {
            var head = document.getElementById('h1');
            head.style.color = 'red';
        }
        function Green() {
            var head = document.getElementById('h1');
            head.style.color = 'green';
        }
        function Blue() {
            var head = document.getElementById('h1');
            head.style.color = 'blue';
        }
    </script>


То "визуально" выполняется только последняя функция (выполнение первых двух глаз не замечает), а как сделать так, чтобы каждая функция происходила с задержкой?

Update
Спасибо за ответы, но уточню задачу - нужен универсальный метод, который будет просто получать список имен функций, и исполнять их по очереди, с задержкой после каждой (или перед каждой, не важно).
  • Вопрос задан
  • 274 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Stalker_RED
@Stalker_RED
Вы практически одновременно запускаете три таймера на одну секунду. секунда проходит и они практически одновременно срабатывают.
Можно поставить им разную задержку
setTimeout(Red, 1000);
setTimeout(Green, 2000);
setTimeout(Blue, 3000);

Или использовать setInterval, и показывать цвета по по очереди.
var i=0,
    timer = setInterval(()=>
        h1.style.color = ['red','green','blue'][i++] || clearInterval(timer)
    , 1000)
https://jsfiddle.net/m5qg1us9/

UPD: то-же самое, но в массиве функции:
var myFunctions = [Red, Green, Blue]

var i=0, timer = setInterval(()=>{
  if (i < myFunctions.length) myFunctions[i++]()
  else clearInterval(timer)
}, 1000)
https://jsfiddle.net/nk7gepjw/

Вариант с итератором: https://jsfiddle.net/zdcL58ho/
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Kianl
@Kianl
Печальный веб-разработчик
Вы запускаете 3 таймера одновременно. Собственно, поэтому виден только 1 результат.
JS - асинхронный язык. Не забывайте.

window.onload = function(){
            setTimeout(Red, 1000);
        }

        function Red() {
            var head = document.getElementById('h1');
            head.style.color = 'red';

            // Вызываем при запуске функции
            setTimeout(Green, 1000);
        }
        function Green() {
            var head = document.getElementById('h1');
            head.style.color = 'green';

            // Вызываем при запуске функции
            setTimeout(Blue, 1000);
        }
        function Blue() {
            var head = document.getElementById('h1');
            head.style.color = 'blue';
        }


Вот как-то так вот :)
Ответ написан
Пример, который можно немного модифицировать под ваши нужды.
Ответ написан
Комментировать
@Sashjkeee
f-e
Ответ написан
Комментировать
@sta-ger
Game Developer
А в чем проблема установить разное значение задержки для каждого из setTimeout-ов?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы