Ce qui est remontée d'événements et la capture?
Quelle est la différence entre la remontée d'événements et la capture? Des deux, lequel est le plus rapide et le meilleur modèle à utiliser?
Vous devez vous connecter pour publier un commentaire.
Quelle est la différence entre la remontée d'événements et la capture? Des deux, lequel est le plus rapide et le meilleur modèle à utiliser?
Vous devez vous connecter pour publier un commentaire.
De remontée d'événements et la capture de deux façons de la propagation de l'évènement dans le DOM HTML API, lorsqu'un événement se produit dans un élément à l'intérieur d'un autre élément, et les deux éléments ont enregistré une poignée pour cet événement. La propagation de l'évènement mode détermine dans quel ordre les éléments reçoivent l'événement.
Avec le bouillonnement, l'événement est d'abord capturé et géré par le centre le plus intime de l'élément et ensuite propagée à l'extérieur des éléments.
Avec la capture, l'événement est d'abord capturé par les ultrapériphériques de l'élément et propagées à l'intérieur des éléments.
De capture est également appelée "goutte à goutte", qui permet de rappeler la propagation de l'ordre:
De retour dans les vieux jours, Netscape plaidé en cas de capture, tandis que Microsoft promu de remontée d'événements. Les deux font partie de la W3C Modèle D'Objet De Document Événements standard (2000).
IE < 9 utilise seulement remontée d'événements, alors que IE9+, et tous les principaux navigateurs prennent en charge à la fois. D'autre part, la la performance de remontée d'événements peut être légèrement inférieure complexes DOMs.
Nous pouvons utiliser la
addEventListener(type, listener, useCapture)
pour enregistrer les gestionnaires d'événements dans la bouillonnante (par défaut) ou en mode de capture. L'utilisation de la capture de modèle de passer le troisième argument commetrue
.Exemple
Dans la structure ci-dessus, supposons qu'un clic événement dans le
li
élément.Dans la saisie du modèle, l'événement sera assurée par la
div
première (cliquez sur les gestionnaires d'événements dans lediv
va tirer le premier), puis dans laul
, puis lors de la dernière dans l'élément cible,li
.Dans le bouillonnement de modèle, le contraire qui se produira: l'événement sera d'abord traitée par le
li
, puis par laul
, et enfin par lediv
élément.Pour plus d'informations, voir
Dans l'exemple ci-dessous, si vous cliquez sur l'un des éléments mis en évidence, vous pouvez voir que la capture de la phase de l'événement de propagation de l'écoulement se produit en premier, suivie par la phase de propagation.
JS:
CSS:
HTML:
Un autre exemple à JSFiddle.
useCapture
maintenant pris en charge dans IE >= 9. sourcetriclkling
le même quecapturing
? Crockford parleTrickling v. Bubbling
dans cette vidéo, parlez - youtube.com/watch?v=Fv9qT9joc0M&liste=PL7664379246A246CB autour de1 hr 5 minutes
.trickle down
=>onElement
=>bubble up
focus
).Description:
quirksmode.org a une belle description de ce. En un mot, copié à partir de quirksmode):
Quoi utiliser?
Cela dépend de ce que vous voulez faire. Il n'y a pas mieux. La différence est de l'ordre de l'exécution des gestionnaires d'événements. La plupart du temps, il sera parfait pour le feu de gestionnaires d'événements dans le bouillonnement phase, mais il peut également être nécessaire pour déclencher au plus tôt.
Si il y a deux éléments de l'élément 1 et l'élément 2. Élément 2 est à l'intérieur de l'élément 1 et de nous associer un gestionnaire d'événement à la fois les éléments permet de dire onClick. Maintenant, lorsque l'on clique sur l'élément 2, puis gestionnaire d'événements pour les deux éléments seront exécutées. Maintenant, voici la question est de savoir dans quel ordre les événements à exécuter. Si l'événement s'est attaché à l'élément 1 est exécutée en premier lieu, il est appelé événement de capture et si l'événement attaché à l'élément 2 s'exécute en premier, cela s'appelle de remontée d'événements.
Comme par le W3C au début de l'événement dans la capture de phase jusqu'à ce qu'il atteigne la cible revient à l'élément et ensuite il commence à bouillonner
La capture et la formation de bulles d'etats par la useCapture paramètre de la méthode addEventListener
Par Défaut useCapture est faux. Cela signifie qu'il est dans la phase de propagation.
JS:
CSS:
HTML:
S'il vous plaît essayer avec l'évolution de vrai et de faux.
the event will start in the capturing phase untill it reaches the target comes back to the element and then it starts bubbling
. J'ai seulement trouvé le addEventListener a l'paramètreuseCapture
qui peut être vrai ou faux; et en HTML 4.0, les écouteurs d'événement ont été définis comme des attributs de l'élément etuseCapture defaults to false
. Pourriez-vous un lien à une spécification qui confirme ce que vous avez écrit?J'ai trouvé ce tutoriel javascript.info d'être très clair dans l'explication de ce sujet. Et son 3-points de résumé à la fin est réellement en train de parler de l'essentiel. Je cite ici:
Il y a aussi le
Événement.eventPhase
une propriété qui peut vous dire si l'événement correspond à la cible ou vient d'ailleurs.Noter que la compatibilité avec les navigateurs n'est pas encore déterminé. Je l'ai testé sur Chrome (66.0.3359.181) et Firefox (59.0.3) et il est pris en charge là.
Expansion sur le déjà grand extrait de de la accepté de répondre à, c'est la sortie à l'aide de la
eventPhase
propriétéJS:
CSS:
HTML:
Bouillonnement
Capture