Y a-t-il des événements déclenchés par un élément pour vérifier si une transition css3 a débuté ou s'est terminée?
Réponses
Trop de publicités?W3C CSS Transitions Projet
La réalisation d'une Transition CSS génère un correspondant d'Événements DOM. Un événement est déclenché pour chaque propriété qui subit une transition. Cela permet à un développeur de contenu pour effectuer des actions qui se synchroniser avec l'achèvement de la transition.
Webkit
Vous pouvez définir un gestionnaire pour un événement DOM qui est envoyé à la fin d'une de transition. L'événement est une instance de WebKitTransitionEvent et son type est webKitTransitionEnd en JavaScript.
box.addEventListener( 'webkitTransitionEnd',
function( event ) { alert( "Finished transition!" ); }, false );
Mozilla
Il y a un seul événement qui est déclenché quand les transitions complet. Dans Firefox, l'événement est -
transitionend
, à l'Opéra,oTransitionEnd
, et dans WebKit, c'est -webkitTransitionEnd
.
Opéra
Il y a un type de transition de l'événement disponible. L'
oTransitionEnd
événement se produit à la fin de l' de transition.
Internet Explorer
L'
transitionend
événement se produit à la fin de la transition. Si la transition est retiré avant la fin, l'événement ne sera pas le feu.
DONC: Comment faire pour normaliser CSS3 Transition fonctions de l'ensemble des navigateurs?
J'ai été en utilisant l'approche donnée par Pete, cependant j'ai maintenant commencé à utiliser la suite
$(".myClass").one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd',
function() {
//do something
});
Alternativement, si vous utiliser bootstrap, alors vous pouvez simplement faire
$(".myClass").one($.support.transition.end,
function() {
//do something
});
C'est parce qu'ils incluent les éléments suivants dans bootstrap.js
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
function transitionEnd() {
var el = document.createElement('bootstrap')
var transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd otransitionend',
'transition' : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false, $el = this
$(this).one($.support.transition.end, function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
}
$(function () {
$.support.transition = transitionEnd()
})
}(jQuery);
Remarque ils comprennent également une emulateTransitionEnd de fonction qui peuvent être nécessaires pour assurer un rappel se produit toujours.
Être conscient que, parfois, cet événement ne se déclenche pas, habituellement dans le cas lorsque les propriétés ne changent pas ou la peinture n'est pas déclenché. Pour s'assurer que nous toujours obtenir un rappel, nous allons définir un délai d'attente qui va déclencher l'événement manuellement.
Dans Opera 12 lorsque vous liez à l'aide de la plaine JavaScript, 'oTransitionEnd':
document.addEventListener("oTransitionEnd", function(){
alert("Transition Ended");
});
toutefois, si vous liez à travers jQuery, vous devez utiliser l'option "otransitionend'
$(document).bind("otransitionend", function(){
alert("Transition Ended");
});
Dans le cas où vous êtes à l'aide de Modernizr ou bootstrap-transition.js vous pouvez simplement faire un changement:
var transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd otransitionend',
'msTransition' : 'MSTransitionEnd',
'transition' : 'transitionend'
},
transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
Vous pouvez trouver quelques infos ici http://www.ianlunn.co.uk/blog/articles/opera-12-otransitionend-bugs-and-workarounds/