Яка різниця між подіями миші та мишею?


153

Я завжди використовував mouseoverподію, але під час читання документації на jQuery я знайшов mouseenter. Вони, здається, функціонують точно так само.

Чи є різниця між двома, і якщо так, то коли я повинен їх використовувати?
(Також стосується і mouseoutvs mouseleave).

Відповіді:


118

Ви можете спробувати наступний приклад на сторінці документа jQuery . Це хороша маленька, інтерактивна демонстрація, яка робить це дуже зрозумілим, і ви насправді можете самі переконатися.

Коротше кажучи, ви помітите, що подія миші над елементом відбувається, коли ви перебуваєте над ним - надходить або від його дочірнього АБО батьківського елемента, але подія введення миші відбувається лише тоді, коли миша рухається з-за меж цього елемента до цього елемента.

Або, якmouseover() висловлюються документи :

[ .mouseover()] може викликати багато головних болів через бурхливість подій. Наприклад, коли в цьому прикладі вказівник миші переміщається над Внутрішнім елементом, на нього буде надіслана подія миші, а потім прокручуємо до Зовнішньої. Це може спровокувати наш зв'язаний обробник миші в невідповідний час. Дивіться обговорення для .mouseenter()корисної альтернативи.


40
Неправда, що mouseenter"відбувається лише тоді, коли миша переходить від батьківського елемента до елемента". Подія відбувається, коли миша переходить від елемента, що знаходиться поза елементом, до його всередині. Не має значення, з якого елемента мишка взялася. Це правда, що миша часто буде надходити від батьків, але не завжди. Наприклад, якщо батько не має відступів або кордонів, то миша може увійти прямо з прабатьків, і по- mouseenter, як і раніше буде стріляти. Насправді він навіть може вводити елемент поза вікном перегляду (якщо елемент знаходиться прямо на краю), і подія все ще запускається.
callum

2
DEMO - найкраще пояснення;)
Luckylooke

по-справжньому, просто пограйте з демонстрацією.
Кевін Уілер

43

MouseEnter і MouseLeave НЕ реагують на пропускання події, а при наведенні курсору миші і MouseOut робити .

Ось стаття, яка описує поведінку.


6
Це прекрасно пояснюється: bl.ocks.org/mbostock/5247027 миші вмикають кожного разу, коли він вистрілюється зсередини контейнера через бурхливість події.
Рафаель Емшофф

4

Як це часто стосується таких питань, Quirksmode має найкращу відповідь .

Я б міг уявити це, оскільки одна з цілей jQuery полягає в тому, щоб зробити браузер агностичним, що використання будь-якої назви події призведе до тієї ж поведінки. Редагувати: завдяки іншим публікаціям, я зараз бачу, що це не так


0
$(document).ready(function() {
$("#outer_mouseover").bind
("Mouse Over Mouse Out",function(event){
console.log(event.type," :: ",this.id);})
$("#outer_mouseenter").bind
("Mouse enter Mouse leave",function(event){
console.log(event.type," :: ",this.id);})
 });


якщо ваш елемент не має дочірніх елементів, але якщо в елемента є діти, то пари поводяться зовсім інакше. У двох словах, якщо ви переведете мишу в елемент, а потім на його дочірню, миші та миші вистрілить, тоді як тільки миші введеться в дію, оскільки ваша миша технічно все ще знаходиться в елементі.
навієний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.