Donc, après avoir lu une question récemment répondue, je ne sais pas si je comprends vraiment la différence entre mouseenter()
et mouseover()
. Le message déclare
MouseOver ():
Se déclenche en entrant dans un élément et à chaque fois que des mouvements de souris se produisent dans l'élément.
MouseEnter ():
Se déclenchera en entrant dans un élément.
J'ai trouvé un violon qui utilise les deux et ils semblent assez similaires. Quelqu'un peut-il m'expliquer la différence entre les deux?
J'ai également essayé de lire les définitions de JQuery, les deux disent la même chose.
L'événement mouseover est envoyé à un élément lorsque le pointeur de la souris entre dans l'élément
L'événement mouseenter est envoyé à un élément lorsque le pointeur de la souris entre dans l'élément.
Quelqu'un peut-il clarifier avec un exemple?
la source
Réponses:
Vous voyez le comportement lorsque votre élément cible contient des éléments enfants:
http://jsfiddle.net/ZCWvJ/7/
Chaque fois que votre souris entre ou quitte un élément enfant,
mouseover
se déclenche, mais pasmouseenter
.la source
mouseleave
événement: jsfiddle.net/ZCWvJ/232 jsfiddle.net/ZCWvJ/233 Si sur l' endroit où la même que la touche enter + congé, le nombre de plus serait la somme de les comptes pour entrer et sortir.var n = + el.text();
au lieu devar n = el.text();
? Je demande juste de la curiosité.+
opérateur pour forcer la chaîne renvoyéeel.text()
à un nombre. En ai-je besoin ? Non. Dans ce cas, l'instruction suivante qui utilisen
le contraindrait également à un nombre. Alors, pourquoi l' ai-je utilisé? Je ne suis pas sûr ... c'était il y a 2 ans. C'est une bonne habitude. Cela rend mon intention explicite. J'avais probablement à l'originen + 1
avant de sauvegarder, mais j'ai décidé de réduire mon code de 2 caractères et de simplement l'utiliser++n
.n + 1
ne pas contraindren
à un certain nombre, mais serait plutôt contraindre1
à une chaîne résultante en sortie, par exemple0111111
.C'est l'un des meilleurs exemples que j'ai trouvés:
http://bl.ocks.org/mbostock/5247027
la source
Bien qu'ils fonctionnent de la même manière, l'
mouseenter
événement ne se déclenche que lorsque le pointeur de la souris entre dans l'élément sélectionné . L'mouseover
événement est déclenché si un pointeur de souris entre également des éléments enfants .la source
Voir l'exemple de code et la démo au bas de la page de documentation jquery:
http://api.jquery.com/mouseenter/
la source
L' événement mouseenter diffère du survol de la souris dans la façon dont il gère le bullage d'événement . L' événement mouseenter ne déclenche son gestionnaire que lorsque la souris entre dans l'élément auquel il est lié, pas dans un descendant . Reportez-vous: https://api.jquery.com/mouseenter/
L' événement mouseleave diffère de mouseout par la manière dont il gère le bullage d'événement . L' événement mouseleave ne déclenche son gestionnaire que lorsque la souris quitte l'élément auquel elle est liée, pas un descendant . Reportez-vous: https://api.jquery.com/mouseleave/
la source
Cet exemple montre la différence entre les événements mousemove , mouseenter et mouseover :
https://jsfiddle.net/z8g613yd/
HTML:
CSS:
JS:
onmousemove
: se produit chaque fois que le pointeur de la souris est déplacé sur l'élément div.onmouseenter
: se produit uniquement lorsque le pointeur de la souris entre dans l'élément div.onmouseover
: se produit lorsque le pointeur de la souris entre dans l'élément div et ses éléments enfants (p et span).la source
<script>
jsfiddle.net/orc8empdAncienne question, mais toujours pas de bonne réponse à jour avec perspicacité imo.
De nos jours, tous les navigateurs prennent en charge
mouseover/mouseout
etmouseenter/mouseleave
. Néanmoins, jQuery n'enregistre pas votre gestionnaire dansmouseenter/mouseleave
, mais les place silencieusement sur un wrappersmouseover/mouseout
comme le montre le code suivant et fait sa propre interprétation légèrement différente demouseenter/mouseleave
.Le comportement exact des événements est particulièrement pertinent sur les «gestionnaires délégués». Malheureusement, jQuery a également sa propre interprétation différente de ce que sont les gestionnaires de délégués et de ce qu'ils devraient recevoir pour les événements. Ce fait est montré dans une autre réponse pour l'événement de clic plus simple.
Alors, comment répondre correctement à une question sur jQuery, qui utilise un libellé Javascript pour les événements et les gestionnaires, mais rend les deux différents et ne le mentionne même pas dans sa documentation?
Tout d'abord les différences dans le «vrai» Javascript:
enter/over
obtient un correspondantleave/out
(éventuellement en retard / nerveux)mouseenter/mouseleave
mouseover/mouseout
Après quelques tests, cela montre que tant que vous n'utilisez pas de «gestionnaires de délégués avec enregistrement de sélecteur» jQuery, l'émulation est inutile mais raisonnable: elle filtre les
mouseover/mouseout
événements que amouseenter/mouseleave
n'obtiendrait pas. La cible est cependant foirée. Le realmouseenter/mouseleave
donnerait l'élément handler comme cible, l'émulation pourrait indiquer les enfants de cet élément, c'est-à-dire quel que soit lemouseover/mouseout
porté.Afficher l'extrait de code
la source