Я хотел бы потушить элемент (изменив его непрозрачность на 0), а затем, когда закончите, удалить элемент из DOM.
В jQuery это просто, так как вы можете указать «Удалить», которое должно произойти после завершения анимации. Но если я хочу анимировать с помощью CSS3-переходов, есть ли способ узнать, когда переход / анимация завершены?
Ответы:
Для переходов вы можете использовать следующее для определения конца перехода через jQuery:
У Mozilla есть отличная ссылка:
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions#Detecting_the_start_and_completion_of_a_transition
Для анимации это очень похоже:
Обратите внимание, что вы можете передавать все строки событий с префиксом браузера одновременно в метод bind (), чтобы поддерживать срабатывание события во всех браузерах, которые его поддерживают.
Обновить:
Согласно комментарию, оставленному Duck: вы используете
.one()
метод jQuery, чтобы обработчик срабатывал только один раз. Например:Обновление 2:
bind()
Метод jQuery устарел, иon()
метод является предпочтительным сjQuery 1.7
.bind()
Вы также можете использовать
off()
метод в функции обратного вызова, чтобы обеспечить его запуск только один раз. Вот пример, который эквивалентен использованиюone()
метода:Ссылки:
.off()
.one()
источник
.on()
а не.bind()
для JQuery v1.7 + api.jquery.com/bindДругой вариант - использовать jQuery Transit Framework для обработки ваших переходов CSS3. Переходы / эффекты хорошо работают на мобильных устройствах, и вам не нужно добавлять ни одной беспорядочной CSS3-переходы в ваш CSS-файл для создания анимационных эффектов.
Вот пример, при котором непрозрачность элемента будет изменена на 0 при нажатии на него, и будет удалена после завершения перехода:
JS Fiddle Demo
источник
Существует
animationend
событие, которое можно наблюдать, см. Документацию здесь , также дляtransition
анимации CSS вы можете использоватьtransitionend
событиеНет необходимости в дополнительных библиотеках, все они работают с vanilla JS
источник
Для тех, кому это может пригодиться, вот зависимая от jQuery функция, с которой я успешно справился, применив CSS-анимацию через класс CSS, а затем получил обратный вызов. Возможно, он не работает идеально, поскольку он использовался в приложении Backbone.js, но, возможно, полезен.
Я использовал это вроде как это
Оригинальная идея от http://mikefowler.me/2013/11/18/page-transitions-in-backbone/
И это кажется удобным: http://api.jqueryui.com/addClass/
Обновить
После борьбы с приведенным выше кодом и другими опциями я бы предложил быть очень осторожным с любым прослушиванием концов CSS-анимации. При наличии нескольких анимаций это может очень быстро запутаться для прослушивания событий. Я настоятельно рекомендую использовать библиотеку анимации, такую как GSAP, для каждой анимации, даже для небольших.
источник
e.stopImmediatePropagation(); self.trigger(this.whichAnimationEvent()); //for purge existing event callback.apply(self);
Принятый ответ в настоящее время запускается дважды для анимации в Chrome. Предположительно, это потому, что он признает,
webkitAnimationEnd
а такжеanimationEnd
. Следующее, безусловно, будет срабатывать только один раз:источник