2017-02-01 2 views
1

У меня есть кнопка <button class="foo">Foo</button> с обработчиком событий, присоединенным к нему, что разворачивает или сворачивает блок, используя .slideToggle()остановка анимации с использованием slideToggle

$('.foo').on('click', function() { 
    const fooBlock = $(this).next(); 
    fooBlock.slideToggle(() => { 
    fooBlock.toggleClass('hidden'); 
    }); 

Если пользователь нажимает на кнопку, когда анимация находится в переходном периоде, то щелчок в очереди. Как остановить анимацию, если пользователь нажимает кнопку во время выполнения анимации?

+0

В качестве альтернативы, булево значение в переводе и проверка в обработчике кликов, если происходит переход или нет. Нет необходимости удалять/readd-обработчики, что только замедляет страницу по сравнению с оставлением обработчика и просто не выполняет его иногда. – Shilly

ответ

0

Лучшим решением является просто использовать stop(true), чтобы очистить очередь при последовательных кликах. Это означает, что пользовательский интерфейс все еще реагирует на ввод пользователя во время анимации, а также предотвращает создание анимаций. Попробуйте следующее:

$('.foo').on('click', function() { 
    const fooBlock = $(this).next(); 
    fooBlock.stop(true).slideToggle(() => { 
    fooBlock.toggleClass('hidden'); 
    }); 
}); 
Смежные вопросы