È possibile ricevere una notifica (come il callback) quando una transizione CSS è stata completata?Richiamata sulla transizione CSS
risposta
So che Safari implementa un callback webkitTransitionEnd che è possibile allegare direttamente all'elemento con la transizione.
Il loro esempio (riformattato a più linee):
box.addEventListener(
'webkitTransitionEnd',
function(event) {
alert("Finished transition!");
}, false);
Sì, se queste cose sono supportate dal browser, quindi viene attivato un evento quando la transizione completa. L'evento reale però, si differenzia tra i browser:
- browser Webkit (Chrome, Safari) usa
webkitTransitionEnd
- Firefox utilizza
transitionend
- IE9 + utilizza
msTransitionEnd
- Opera utilizza
oTransitionEnd
Tuttavia si dovrebbe essere consapevole che webkitTransitionEnd
non si attiva sempre! Questo mi ha catturato fuori un certo numero di volte, e sembra accadere se l'animazione non avrebbe alcun effetto sull'elemento. Per ovviare a questo, ha senso utilizzare un timeout per attivare il gestore di eventi nel caso in cui non sia stato attivato come previsto. Un post sul blog su questo problema è disponibile qui: http://www.cuppadev.co.uk/the-trouble-with-css-transitions/<-500 Internal Server Error
Con questo in mente, ho tendono ad usare questo evento in un pezzo di codice che sembra un po 'come questo:
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)
Nota: per ottenere il nome finale dell'evento di transizione è possibile utilizzare il metodo inviato come risposta in: How do I normalize CSS3 Transition functions across browsers?.
Nota: questa domanda è anche legato a: - CSS3 transition events
Questa è una risposta molto più completa di quello accettato. Perché non è questo più upvoted. – Wes
Ricordarsi di chiamare 'transitionEndedHandler' in' transitionEnded' (o modificare 'transitionEnded' di' transitionEndedHandler' in 'addEventListener' e' removeEventListener' e chiamare 'transitionEnded' in' transitionEndedHandler') – Miquel
Grazie a @Miquel; penso che abbia usato 'transitionEnded 'quando intendevo' transitionEndedHandler'. –
Il jQuery.transit plugin, un plugin per le trasformazioni e transizioni CSS3, può chiamare le animazioni CSS dallo script e vi darò un callback.
Sto usando il seguente codice, è molto più semplice di cercare di individuare quale specifico evento finale viene utilizzato da un browser.
$(".myClass").one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd',
function() {
//do something
});
In alternativa, se si utilizza bootstrap allora si può semplicemente fare
$(".myClass").one($.support.transition.end,
function() {
//do something
});
Questo è becuase essi includono quanto segue in 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);
Questo è più lento perché deve cercare nell'intero elenco ogni volta che accade l'evento per vedere se è quello corretto. – phreakhead
@phreakhead Le prestazioni di questi approcci saranno molto simili – Tom
- 1. transizione CSS non funziona sulla proprietà top in FF
- 2. Transizione CSS: due direzioni?
- 3. Dissolvenza transizione CSS in
- 4. CSS: animazione vs transizione
- 5. CSS: dopo hover transizione
- 6. CSS- transizione non funziona
- 7. Esegui richiamata sulla filettatura principale
- 8. Prestazioni di transizione CSS vs animazione CSS
- 9. Dissolvenza transizione CSS su hover
- 10. move div con transizione CSS
- 11. transizione CSS semplice non esegue
- 12. Angularjs ng-show basato sulla richiamata
- 13. Perché calling focus() interrompe la transizione CSS?
- 14. Unità per la durata della transizione CSS
- 15. Div espandibile con transizione nei CSS
- 16. Twitter Bootstrap carousel - transizione css in Firefox
- 17. Stenografia della transizione CSS con proprietà multiple?
- 18. Come fare una transizione CSS "all'indietro"?
- 19. Dissolvenza transizione CSS solo per elemento
- 20. transizione css sul gradiente dell'immagine di sfondo
- 21. Definire più proprietà di transizione nei CSS
- 22. Jerky CSS trasforma la transizione in Chrome
- 23. Transizione CSS con visibilità non funzionante
- 24. CSS: opacità di transizione all'uscita del mouse?
- 25. Transizione CSS basata su font in Chrome
- 26. Il passaggio del mouse sulla transizione CSS in Safari alleggerisce determinati colori dei caratteri
- 27. Posso animare l'elemento posizionato assoluto con la transizione CSS?
- 28. Richiamata richiamata thread
- 29. Come eseguire un'animazione dissolvenza sulla transizione di attività?
- 30. Modifica la transizione della pagina sulla stessa pagina
http: // StackOverflow. it/questions/5023514/how-do-i-normalize-css3-transition-functions-across-browsers – zloctb