J'ai trouvé la réponse basé sur le code source et les exemples à l' CSS3 transition tests github page.
Fondamentalement, les animations CSS ont un animationEnd
événement est déclenché lorsque l'animation est terminée.
Pour les navigateurs webkit cet événement est nommé "webkitAnimationEnd
". Donc, pour remettre une animation après qu'il a été appelé, vous devez ajouter un écouteur d'événement à l'élément de l' animationEnd
événement.
Dans la plaine de la vanille javascript:
var element = document.getElementById('box');
element.addEventListener('webkitAnimationEnd', function(){
this.style.webkitAnimationName = '';
}, false);
document.getElementById('button').onclick = function(){
element.style.webkitAnimationName = 'shake';
// you'll probably want to preventDefault here.
};
et avec jQuery:
var $element = $('#box').bind('webkitAnimationEnd', function(){
this.style.webkitAnimationName = '';
});
$('#button').click(function(){
$element.css('webkitAnimationName', 'shake');
// you'll probably want to preventDefault here.
});
Le code source de CSS3 tests de transition (mentionné ci-dessus) a support
objet qui peut être utile pour les navigateurs les transitions CSS, les transforme et les animations.
Voici le code de prise en charge (re-formaté):
var css3AnimationSupport = (function(){
var div = document.createElement('div'),
divStyle = div.style,
// you'll probably be better off using a `switch` instead of theses ternary ops
support = {
transition:
divStyle.MozTransition === ''? {name: 'MozTransition' , end: 'transitionend'} :
// Will ms add a prefix to the transitionend event?
(divStyle.MsTransition === ''? {name: 'MsTransition' , end: 'msTransitionend'} :
(divStyle.WebkitTransition === ''? {name: 'WebkitTransition', end: 'webkitTransitionEnd'} :
(divStyle.OTransition === ''? {name: 'OTransition' , end: 'oTransitionEnd'} :
(divStyle.transition === ''? {name: 'transition' , end: 'transitionend'} :
false)))),
transform:
divStyle.MozTransform === '' ? 'MozTransform' :
(divStyle.MsTransform === '' ? 'MsTransform' :
(divStyle.WebkitTransform === '' ? 'WebkitTransform' :
(divStyle.OTransform === '' ? 'OTransform' :
(divStyle.transform === '' ? 'transform' :
false))))
//, animation: ...
};
support.transformProp = support.transform.name.replace(/([A-Z])/g, '-$1').toLowerCase();
return support;
}());
Je n'ai pas ajouté le code pour détecter les "animation" les propriétés de chaque navigateur. J'ai fait cette réponse "wiki de la communauté" et de quitter que pour vous. :-)