Ingernirated
@Ingernirated
Романыч

Как замедлить цикл прерыванием времени?

Всем привет!
Есть функция
let x = document.querySelectorAll(".x");

function move() {
x.forEach((e) => {
e.style.display = "block";
}

Как её заставить перед очередным срабатыванием для следующего элемента e ждать по 1 сек?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 3
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
let x = document.querySelectorAll(".x")

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms))
}

async function move() {
  x.forEach((e) => {
	await sleep(1000)
	e.style.display = "block"
  }
}
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
function move() {
    let wait = 0;
    x.forEach((e) => {
        setTimeout(function() {e.style.display = "block";}, wait);
        wait += 1000;
    }
}
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const onTimeout = el => el.style.display = 'block';

document.querySelectorAll('.x').forEach((n, i) => {
  setTimeout(onTimeout, i * 1000, n);
});

или

let index = -1;

const intervalId = setInterval(items => {
  const el = items[++index];
  if (el) {
    el.style.display = 'block';
  } else {
    clearInterval(intervalId);
  }
}, 1000, document.querySelectorAll('.x'));

или

(function next(items, index) {
  if (items[index]) {
    setTimeout(() => {
      items[index].style.display = 'block';
      next(items, index + 1);
    }, 1000);
  }
})(document.querySelectorAll('.x'), 0);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@akavato
frontend dev
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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