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

Поочерёдное добавление класса jQuery?

У меня есть список меню, я хочу чтобы при клике на определенный блок, каждый пункт меню выезжал с небольшой задержкой. Я добавляю класс с анимацией выезжания, но тогда выезжают все пункты разом, а мне нужно поочерёдно. Как это реализовать?
<ul>
<li> Пункт 1 </li>
<li> Пункт 2 </li>
<li> Пункт 3 </li>
<li> Пункт 4 </li>
</ul>
  • Вопрос задан
  • 224 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const $elements = $('здесь селектор ваших элементов');
const updateElement = i => $elements.eq(i).addClass('здесь ваш класс');
const delay = 500;

Можно сразу назначить таймауты для каждого из элементов, с временем задержки, зависящим от индекса элемента:

$elements.each(i => setTimeout(updateElement, (i + 1) * delay, i));

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

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

Или, вместо таймаутов используется интервал:

const intervalID = setInterval(
  i => updateElement(++i[0]).length || clearInterval(intervalID),
  delay,
  [ -1 ]
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
whillson
@whillson
помогу, чем смогу ^_^
(".spoiler").on("click", function() {
    $(this).next().slideToggle("slow")
})
Ответ написан
Ваш ответ на вопрос

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

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