Как правильно осуществлять задержку в цикле?

Такие дела.

Требуется пройтись по набору элементов и раздать им классы с определенным интервалом.

Пробовал в внутри цикла for() обернуть скрипт в setTimeout() - в итоге только с одним (последним) элементом происходили изменения.

for (var i = 1; i <= 5; i++)
{
	setTimeout(function()
	{
		var image = parent.find('img').eq(i),
		image.addClass('active');
	}, 500);	
}


А идей больше в голову не приходит.
Как же осуществить такое?
  • Вопрос задан
  • 567 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
читаем что такое event loop, что такое колбэки и промисы и как вообще жить в асинхронном мире.

p.s. я подозреваю что число 500 там не с проста и вы таким образом хотите дожидаться окончания анимаций. Так вот, вместо хардкода значений используйте event listener и тогда задача сама собой решится.
Ответ написан
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
function asyncLoop (bound) {
    function step(i) {
        if (i > bound)
            return;
        var image = parent.find('img').eq(i),
        image.addClass('active');
        setTimeout(function () { step(i+1) }, 5000)
    }

    step(1);
}

asyncLoop(5);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы