ho trovato la risposta in base al codice sorgente e gli esempi al CSS3 transition tests github page.
Fondamentalmente, le animazioni CSS hanno un evento animationEnd
che viene generato al termine dell'animazione.
Per i browser Webkit questo evento è denominato "webkitAnimationEnd
". Pertanto, per ripristinare un'animazione dopo che è stata chiamata, è necessario aggiungere un listener di eventi all'elemento per l'evento animationEnd
.
in JavaScript vaniglia:
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.
};
e con jQuery:
var $element = $('#box').bind('webkitAnimationEnd', function(){
this.style.webkitAnimationName = '';
});
$('#button').click(function(){
$element.css('webkitAnimationName', 'shake');
// you'll probably want to preventDefault here.
});
Il codice sorgente per CSS3 transition tests (di cui sopra) ha la support
seguente oggetto che può essere utile per il cross -Browser Transizioni CSS, trasformazioni e animazioni.
Ecco il codice di supporto (ri-formattato):
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;
}());
non ho aggiunto il codice per rilevare le proprietà “animazione” per ciascun browser. Ho fatto questa risposta "wiki della comunità" e lasciatelo a voi. :-)
jQuery o una libreria simile è un'opzione? Probabilmente vedrai un supporto migliore per il browser. –
jQuery è disponibile ma non è realmente applicabile nel mio caso. Non ho bisogno di altro supporto per il browser poiché verrà eseguito solo in Adobe Air. Sto cercando di rimanere con le animazioni css invece di javascript. –
Rilevante: [Firmin - Libreria di animazioni JavaScript che utilizza trasformazioni e transizioni CSS] (http://extralogical.net/projects/firmin/) –