2012-08-18 8 views
5

Adjunté un evento transitionend al div1. Cuando se completó la transición de div1, se ejecutó el evento. No hay problema.¿Por qué se puede ejecutar el evento transitionend cuando finaliza la transición de elementos del elemento?

me encontré con un caso especial:

añadí 3 párrafos a esta div1, cuando se puso fin a la transición de cada párrafo, transitionend caso div1 's también funcionó. Entonces, el evento transitionend se ejecutó 4 veces. >. <

En transitionend cuerpo de función de detector de eventos div1 's, puedo ver que event.target! == this. ¡Siento que es bastante ridículo!

Chrome y Firefox tienen este problema. Así que supongo que este no es un error de implementación de especificaciones HTML5 de un navegador.

¿Alguien puede explicar por qué el evento de un elemento transitionend también se puede desencadenar mediante el elemento secundario de este elemento?

Gracias.

+0

Se puede publicar su código? – tptcat

+0

No puedo obtener los códigos de reproducción de este problema. Pero puedo asegurar que veo el cuerpo de la función de oyente 'event.target! == this' en 'transitionend'. No puedo entender este extraño problema. ¿Crees que esto es un error de Chrome y Firefox? – weilou

Respuesta

9

Esto se denomina evento de burbujeo. Muchos eventos que ocurren en un elemento hijo, de forma predeterminada, irán surgiendo a través de los padres después de que se llame al controlador de eventos en el objeto de origen. Puede detectar el burbujeo como lo ha notado al examinar el objeto event o puede evitar el burbujeo al detener la propagación cuando maneja el evento en el objeto fuente.

Detener la propagación es una de esas cosas que es diferente en IE frente a otros navegadores. En otros navegadores, se llama:

event.stopPropagation() 

En IE antes de IE9:

window.event.cancelBubble = true; 
+1

Gracias por su respuesta. En primer lugar, creo que el evento 'transitionend' debe ser especial. No debería agregarse a la cadena de burbujeo del evento. Por lo tanto, W3C debería mejorar su especificación del evento HTML5 'transitionend'. En segundo lugar, realmente no vinculo el evento 'transitionend' a 3 párrafos. Entonces ... ¿Parece que es un error del error de implementación de especificación HTML5 de Chrome y Chrome Firefox? Solo configuro 'transition' en 3 párrafos. – weilou

+3

@WeiLou - muchos eventos burbujean (clics, claves, etc.). Es la forma en que los thigs funcionan en un navegador, por lo que 'transitionend' no es diferente a otros eventos. Solo necesita saber eso ahora y codificarlo. Si desea saber si el evento pertenece a este objeto en particular, simplemente mire 'event.target' para ver si coincide con su objeto o si se trata de algún otro objeto. El burbujeo puede ser muy, muy útil en algunas circunstancias. – jfriend00

+0

Gracias por tu comentario. :) – weilou

Cuestiones relacionadas