Есть такая задача:
Элемент (например div) должен двигаться влево по клику по кнопке.
Кликнули по кнопке, скрипт изменил свойство элемента left на определенный шаг. Все ок.
Необходимо чтобы после клика по кнопке, пока объект не перестанет двигаться, кнопка не реагировала бы на другой клик по ней. Т.е. грубо говоря, пока обрабатывается первый клик (происходит какая-то анимация и т.п.), на еще один клик кнопка не должна реагировать. Как анимация завершится, кнопка снова может обрабатывать клик. Не знаю как это сделать.
Если несколько раз кликнуть по кнопке быстро, то все обработчики становятся в очередь и обрабатываются. В итоге если быстро кликнули по кнопке три раза, то элемент переместится на 3 шага. А мне жизненно важно чтобы элемент перемещался на один шаг. Как только шаг завершится, кнопка доступна для еще одного клика и т.д.
Вариант со скрытием кнопки, пока идет анимация, не подходит.
Как быть? Можно ли из многочисленных кликов по кнопке обрабатывать только первый клик? А остальные клики не выстраивать в очередь. Как только завершится код внтри обработчика клика, то по кнопке снова можно кликать???
var i = 0,
sectionlength = $('.section').length-1;
function scrollSlide () {
var first = $('.section')[i];
i++;
(i > 3)?i=0:false;
$('.section').animate({'transform': 'scale(0.9)'}, {
step: function(){
$('.section').css({'transform': 'scale(0.9)'});
}}, 700);
$('.parent_in').delay(1000).animate({
'margin-left': '-'+ i + '00vw'
}, 700);
$('.section').delay(1400).animate({top: 0}, {
step: function(){
$('.section').css({'transform': 'scale(1)'});
}}, 500);
}
$('.parent').on("click", function () {
scrollSlide(); тут нужно вызывать функцию после того, как первый закончит свою работу и так каждый раз
});