2012-08-18 9 views
5

Ho associato un evento transitionend a div1. Al termine della transizione di div1, l'evento è stato eseguito. Non c'è problema.Perché l'evento di transizione può essere eseguito quando la transizione dei figli di un elemento è terminata?

ho incontrato un caso speciale:

ho aggiunto 3 punti a questo div1, quando la transizione di ogni paragrafo è finita, transitionend evento div1 s' anche corse. Quindi l'evento transitionend è stato eseguito 4 volte. >. <

In transitionend corpo di funzione listener dell'evento div1 s', vedo che event.target! == this. Sento che è abbastanza ridicolo!

Chrome e Firefox hanno entrambi questo problema. Quindi immagino che questo non sia un bug di implementazione delle specifiche HTML5 di un browser.

Qualcuno può spiegare perché l'evento transitionend di un elemento può essere attivato anche dall'elemento figlio di questo elemento?

Grazie.

+0

potete inserire il tuo codice? – tptcat

+0

Non riesco a ottenere i codici di riproduzione di questo problema. Ma sono sicuro di vedere il corpo della funzione di ascolto dell'evento 'event.target! == this' in 'transitionend'. Non riesco a capire questo strano problema. Pensi che questo sia un bug sia di Chrome che di Firefox? – weilou

risposta

9

Questo è chiamato evento spumeggiante. Per impostazione predefinita, molti eventi che si verificano su un elemento figlio vengono visualizzati dai genitori dopo che il gestore eventi viene chiamato sull'oggetto di origine. Puoi rilevare bubbling come hai notato esaminando l'oggetto event oppure puoi evitare il bubbling interrompendo la propagazione quando gestisci l'evento sull'oggetto di origine.

Arrestare la propagazione è una di quelle cose che sono diverse in IE rispetto ad altri browser. In altri browser, si chiama:

event.stopPropagation() 

In IE prima di IE9:

window.event.cancelBubble = true; 
+1

Grazie per la risposta. In primo luogo, penso che l'evento 'transitionend' dovrebbe essere speciale. Non dovrebbe essere aggiunto alla catena di bubbling degli eventi. Quindi il W3C dovrebbe migliorare le proprie specifiche dell'evento 'transitionend' HTML5. In secondo luogo, in realtà non leghiamo l'evento 'transitionend' a 3 paragrafi. Quindi ... Sembra che sia un bug del bug di implementazione delle specifiche HTML5 di Firefox e di Chrome? Ho impostato 'transition' su 3 paragrafi. – weilou

+3

@WeiLou - un sacco di bolle di eventi (clic, chiavi, ecc ...). È il modo in cui i thnigs funzionano in un browser, quindi 'transitionend' non è diverso dagli altri eventi. Hai solo bisogno di sapere che ora e il codice per questo. Se vuoi sapere se l'evento appartiene a questo particolare oggetto, allora guarda a 'event.target' per vedere se corrisponde al tuo oggetto o se è un altro oggetto. Bubbling può essere molto, molto utile in alcune circostanze. – jfriend00

+0

Grazie per il tuo commento. :) – weilou