вызвать функцию не чаще одного раза в 3 сеекуннд
Цитата
При клике вызывается функция которая меняет слайд. Изменение слайда происходить с анимацией где то 1-2 сек. И получается так что если пользователь несколько раз подряд кликнет то если он перестанет кликать будут еще выполняться предыдущие клики. Не знаю. как правильно сформировать вопрос, примерно нужно сделать так чтобы после первого клика второй работал когда слайд изменился, а клики которые были сделаны во время когда слайд меняйся не работали
$('#slider')
.css({
width: '80%',
margin: 'auto'
})
.append(`<div id="slide"></div>`)
.append(`<div id="progress-bar"></div>`)
.click(function(event) {
changeBackground(event.pageX > $('body').width() / 2 ? 1 : -1)
});
let i = 1;
function changeBackground(dir) {
clearInterval(myInterval);
widthPercent += widthPercentAdd * dir;
i += dir;
if (i > 5) {
i = 1;
widthPercent = widthPercentAdd;
};
if (i < 1) {
i = 5;
widthPercent = 100;
};
$('#slide')
.fadeOut(() => {
$('#slide').css({
background: `url("img/${i}.png") center/cover`,
})
})
.fadeIn();
$('#progress-bar__item').css({
width: `${widthPercent}%`,
});
changeCount();
myInterval = setInterval(myTimer, 3000);
};
Ответы (1 шт):
Автор решения: gureenkov56
→ Ссылка
Создай переменную внутри функции, которая будет сообщать о статусе слайдера. Если он в процессе, то return, если нет, то запускаем код дальше.
// создаем глобальную переменную
let sliderInProcess = false;
function changeBackground(dir) {
// не запускаем анимацию, если еще в процессе
if (sliderInProcess) return;
// ставим статус в процессе
sliderInProcess = true;
// код анимации
// через 3 секунды ставим false в статус
setTimer(() => sliderInProcess = false, 3000);
};