Да, если такие вещи поддерживаются браузером, то событие завершается после завершения перехода.Фактическое событие, однако, отличается в разных браузерах:
- Использование браузеров Webkit (Chrome, Safari)
webkitTransitionEnd
- Использование Firefox
transitionend
- Использование IE9 +
msTransitionEnd
- Opera использует
oTransitionEnd
Однако вы должны знать, что webkitTransitionEnd
не всегда срабатывает!Это поймало меня несколько раз и, кажется, происходит, если анимация не будет влиять на элемент.Чтобы обойти это, имеет смысл использовать тайм-аут для запуска обработчика событий в случае, если он не был запущен, как ожидалось.Сообщение в блоге об этой проблеме доступно здесь: http://www.cuppadev.co.uk/the-trouble-with-css-transitions/ <- 500 Внутренняя ошибка сервера </em>
Имея это в виду, я склонен использовать это событие во фрагментекод, который выглядит примерно так:
var transitionEndEventName = "XXX"; //figure out, e.g. "webkitTransitionEnd"..
var elemToAnimate = ... //the thing you want to animate..
var done = false;
var transitionEnded = function(){
done = true;
//do your transition finished stuff..
elemToAnimate.removeEventListener(transitionEndEventName,
transitionEnded, false);
};
elemToAnimate.addEventListener(transitionEndEventName,
transitionEnded, false);
//animation triggering code here..
//ensure tidy up if event doesn't fire..
setTimeout(function(){
if(!done){
console.log("timeout needed to call transition ended..");
transitionEnded();
}
}, XXX); //note: XXX should be the time required for the
//animation to complete plus a grace period (e.g. 10ms)
Примечание: чтобы получить конечное имя события перехода, вы можете использовать метод, указанный в ответе: Как нормализовать функции перехода CSS3 в разных браузерах?.
Примечание. Этот вопрос также связан с: - событиями перехода CSS3