Rikazavr
@Rikazavr
web design hippie

Как изменить класс каждого div по очереди с помощью setTimeout?

У меня есть карточки, нужно чтобы они по очереди "переворачивались" ("переворот" делаю с помощью switchClass). У меня они переворачиваются все разом не смотря на то, что я использую setTimeout. Что я делаю не так? Может предложите более элегантное решение?

5c6ec3fa1182c043192413.png
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const $items = $('.card');
const openedClass = 'card--opened';
const closedClass = 'card--closed';
const delay = 500;
const flip = $item => $item.removeClass(closedClass).addClass(openedClass);

Вариант раз - назначаем таймауты на переключение классов сразу всем элементам, с временем задержки, зависящим от индекса элемента:

$items.each((i, n) => setTimeout(flip, (i + 1) * delay, $(n)));

Вариант два - назначаем таймауты поочерёдно, следующий в коллбеке предыдущего, задержка у всех одинаковая:

(function next(i) {
  if (i < $items.length) {
    setTimeout(() => {
      flip($items.eq(i));
      next(-~i);
    }, delay);
  }
})(0);

Вариант три - вместо таймаутов назначаем интервал:

let i = 0;
const intervalID = setInterval(() => {
  flip($items.eq(i));
  if (++i >= $items.length) {
    clearInterval(intervalID);
  }
}, delay);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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