Добавление класса в цикле с задержкой через setTimeout?

Есть цикл, в котором DOM-элементам из массива добавляется класс:
for(let i = 0; i < itemsArray.length; i++){
      $(itemsArray[i]).addClass('exhibition-display-extra');
  }

Как завернуть сюда setTimeout-функцию таким образом, чтобы добавление класса к каждому из элементов происходило с увеличивающейся задержкой (например first.element.delay = 0, second = 100, third = 200 ect.)
  • Вопрос задан
  • 783 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
setTimeout(function iter(i) {
  itemsArray[i].classList.add('exhibition-display-extra');
  if(++i < itemsArray.length) {
    setTimeout(iter, i * 100, i);
  }
}, 0, 0);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
сделать функцию которая будет из массива забирать данные и рекурсивно вызывать сама себя пока нужные классы не будут созданы
let arrData= ['elem1', 'elem2', 'elem3'];
function f(arr){
if(arr.length>0){
 $(arr.pop()).addClass('exhibition-display-extra');
setTimeout(f(arr),100);
}
}
setTimeout(f(arrData),100);
//ну или если первый элемент без задержки, то просто вызвать f(arrData);

как-то так, могут быть чуток ошибки, но идея верная
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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