Po przeczytaniu niedawno udzielonego pytania nie jestem pewien, czy naprawdę rozumiem różnicę między mouseenter()
i mouseover()
. Stan wiadomości
MouseOver ():
Będzie uruchamiany po wejściu do elementu i za każdym razem, gdy w elemencie wystąpią jakiekolwiek ruchy myszy.
MouseEnter ():
Zapali się po wejściu do elementu.
Wymyśliłem skrzypce, które używają obu i wydają się być dość podobne. Czy ktoś może mi wyjaśnić różnicę między tymi dwoma?
Próbowałem też przeczytać definicje JQuery, obie mówią to samo.
Zdarzenie mouseover jest wysyłane do elementu, gdy wskaźnik myszy wchodzi do elementu
Zdarzenie mouseenter jest wysyłane do elementu, gdy wskaźnik myszy wchodzi do elementu.
Czy ktoś mógłby wyjaśnić na przykładzie?
jquery
dom-events
aziz punjani
źródło
źródło
Odpowiedzi:
Widzisz zachowanie, gdy element docelowy zawiera elementy potomne:
http://jsfiddle.net/ZCWvJ/7/
Za każdym razem, gdy mysz wchodzi lub opuszcza element podrzędny,
mouseover
jest wyzwalana, ale niemouseenter
.źródło
mouseleave
zdarzenie: jsfiddle.net/ZCWvJ/232 jsfiddle.net/ZCWvJ/233 Jeśli ponad to samo, co enter + leave, wtedy licznik do końca będzie sumą liczy się wejście i wyjście.var n = + el.text();
zamiast pisaćvar n = el.text();
? Proszę tylko o ciekawość.+
operatora do przekształcenia ciągu zwróconego zel.text()
na liczbę. Czy ja potrzebuję do? Nie. W tym przypadku następne stwierdzenie, które używan
, również zmusiłoby ją do podania liczby. Więc dlaczego go użyłem? Nie jestem pewien ... to było 2 lata temu. To dobry nawyk. Wyraźnie wyraża mój zamiar. Prawdopodobnie pierwotnie miałem,n + 1
zanim zapisałem, ale zdecydowałem się zmniejszyć mój kod o 2 znaki i po prostu użyć++n
.n + 1
by nie zmuszaćn
do wielu, ale zamiast tego przymusić1
do łańcucha w wyniku produkcji, np0111111
.To jeden z najlepszych przykładów, jakie znalazłem:
http://bl.ocks.org/mbostock/5247027
źródło
Choć działają w ten sam sposób,
mouseenter
zdarzenie jest wyzwalane tylko wtedy, gdy wskaźnik myszy znajdzie się w wybranym elemencie .mouseover
Zdarzenie jest wywoływane , gdy wskaźnik myszy wejdzie żadnych elementów potomnych, jak również .źródło
Zobacz przykładowy kod i demo na dole strony dokumentacji jquery:
http://api.jquery.com/mouseenter/
źródło
W mouseenter zdarzeń różni się od najechaniu myszą w sposób obsługuje pęcherzyków zdarzeń . Mouseenter wydarzenie, tylko wyzwala jego obsługi, gdy mysz wchodzi element jest związany, nie potomka . Zobacz: https://api.jquery.com/mouseenter/
W mouseLeave zdarzeń różni się od odsunięciu myszy w sposób obsługuje pęcherzyków zdarzeń . MouseLeave wydarzenie, tylko wyzwala jego obsługi, gdy opuszcza mysz element jest związany, nie potomka . Zobacz: https://api.jquery.com/mouseleave/
źródło
Ten przykład demonstruje różnicę między zdarzeniami mousemove , mouseenter i mouseover :
https://jsfiddle.net/z8g613yd/
HTML:
CSS:
JS:
onmousemove
: występuje za każdym razem, gdy wskaźnik myszy zostanie przesunięty nad element div.onmouseenter
: występuje tylko wtedy, gdy wskaźnik myszy znajdzie się w elemencie div.onmouseover
: występuje, gdy wskaźnik myszy wchodzi do elementu div i jego elementów potomnych (p i span).źródło
<script>
jsfiddle.net/orc8empdStare pytanie, ale nadal nie ma dobrej, aktualnej odpowiedzi z wglądem imo.
Obecnie wszystkie przeglądarki obsługują
mouseover/mouseout
imouseenter/mouseleave
. Niemniej jednak jQuery nie rejestruje programu obsługimouseenter/mouseleave
, ale po cichu umieszcza je w opakowaniach,mouseover/mouseout
jak pokazuje poniższy kod, i tworzy własną, nieco inną interpretacjęmouseenter/mouseleave
.Dokładne zachowanie zdarzeń jest szczególnie istotne w przypadku „obsługi delegatów”. Niestety, jQuery ma również inną interpretację tego, czym są programy obsługi delegatów i co powinny otrzymywać dla zdarzeń. Fakt ten pokazuje inna odpowiedź dotycząca prostszego zdarzenia kliknięcia.
Jak więc właściwie odpowiedzieć na pytanie o jQuery, które używa sformułowań Javascript dla zdarzeń i handlerów, ale różni je i nawet nie wspomina o tym w swojej dokumentacji?
Najpierw różnice w „prawdziwym” JavaScript:
enter/over
dostaje odpowiednileave/out
(prawdopodobnie późny / niespokojny)mouseenter/mouseleave
mouseover/mouseout
Po kilku testach okazuje się, że dopóki nie używasz „obsługi delegatów z rejestracją selektora” jQuery, emulacja jest niepotrzebna, ale rozsądna: odfiltrowuje
mouseover/mouseout
zdarzenia,mouseenter/mouseleave
których nie uzyska. Jednak cel jest pomieszany. Rzeczywistemouseenter/mouseleave
wskazywałyby element obsługujący jako cel, emulacja mogłaby wskazywać dzieci tego elementu, tj. Cokolwiek jestmouseover/mouseout
przenoszone.Pokaż fragment kodu
źródło