@Nebritbij

Как при наступлении события, отложить выполнение setInterval?

Есть слайдер с автопрокруткой и кнопками вперед назад. как сделать так чтобы при нажатии на кнопку выполнение итерации setInterval откладывалось на n секунд??
this.next = function () {
            that.img[i].classList.remove("activeImg");

            i++;

            if (i >= that.img.length) {

                i = 0;

            };

            that.img[i].classList.add("activeImg");

        };

             setInterval(function () {
         that.next()}, Math.floor(Math.random() * (5000 - 2000 + 1)) + 2000);
    }
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Сохранять id таймера, возвращаемое из setInterval(). При наступлении события останавливать тот interval, и через нужную паузу запускать новый с той же функцией.

Второй вариант – внутри вызываемой функции делать проверку некого флага паузы. Если тот установлен, ничего не выполнять. При наступлении события выставлять тот флаг и через N секунд снимать его:
Примерно так
var flag = false;

this.next = function() {
	that.img[i].classList.remove("activeImg");
	i++;
	if (i >= that.img.length) i = 0;
	that.img[i].classList.add("activeImg");
};

setInterval(
  function() {
	  if(flag) return;
	  that.next()
  }, 
  Math.floor(Math.random() * (5000 - 2000 + 1)) + 2000
);

function onEvent(){
	flag = true;
	setTimeout(()=>{ flag=false}, 3000);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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