Поэтому после прочтения недавно отвеченного вопроса мне неясно, действительно ли я понимаю разницу междуmouseenter()
и mouseover()
. Почта заявляет
MouseOver ():
Срабатывает при входе в элемент и всякий раз, когда в элементе происходят движения мыши.
MouseEnter ():
Будет стрелять при входе в элемент.
Я придумал скрипку, которая использует оба, и они кажутся довольно похожими. Может кто-нибудь, пожалуйста, объясните мне разницу между ними?
Я также попытался прочитать определения JQuery, оба говорят одно и то же.
Событие mouseover отправляется элементу, когда указатель мыши входит в элемент
Событие mouseenter отправляется элементу, когда указатель мыши входит в элемент.
Может кто-нибудь уточнить с примером?
jquery
dom-events
азиз пунджани
источник
источник
Ответы:
Вы видите поведение, когда ваш целевой элемент содержит дочерние элементы:
http://jsfiddle.net/ZCWvJ/7/
Каждый раз, когда ваша мышь входит или покидает дочерний элемент,
mouseover
срабатывает, но нетmouseenter
.источник
mouseleave
событие: jsfiddle.net/ZCWvJ/232 jsfiddle.net/ZCWvJ/233 Если при превышении того же значения, что и ввод + выход, счет за превышение будет суммой рассчитывает на вход и выход.var n = + el.text();
вместоvar n = el.text();
? Я просто прошу любопытства.+
оператор для приведения строки, возвращаемой изel.text()
числа. Мне нужно было? Нет. В этом случае следующее используемое утверждениеn
также приведёт его к числу. Итак, почему я использовал это? Я не уверен ... это было 2 года назад. Это хорошая привычка. Это делает мое намерение явным. Вероятно, у меня изначально было,n + 1
прежде чем я сохранил, но решил уменьшить свой код на 2 символа и просто использовать++n
.n + 1
бы не принуждатьn
к ряду, но вместо этого будет принуждать1
к строке , в результате чего выход, например0111111
.Это один из лучших примеров, которые я нашел:
http://bl.ocks.org/mbostock/5247027
источник
Хотя они работают одинаково, однако,
mouseenter
событие срабатывает только тогда, когда указатель мыши входит в выбранный элемент .mouseover
Событие срабатывает , если указатель мыши входит в дочерние элементы , а также .источник
Посмотрите пример кода и демонстрацию внизу страницы документации jquery:
http://api.jquery.com/mouseenter/
источник
В MouseEnter событие отличается от наведения курсора мыши в том , как она обрабатывает бульканье события . MouseEnter событие, только запускает свой обработчик , когда мышь входит в элемент он обязан, а не потомок . См: https://api.jquery.com/mouseenter/.
В MouseLeave события отличаются от отведения указателя мыши в том , как он обрабатывает бульканье события . MouseLeave событие, только запускает свой обработчик , когда мышь покидает элемент он обязан, а не потомок . См .: https://api.jquery.com/mouseleave/.
источник
Этот пример демонстрирует разницу между перемещением мыши , указателем мыши и наведением мыши :
https://jsfiddle.net/z8g613yd/
HTML:
CSS:
JS:
onmousemove
: происходит каждый раз, когда указатель мыши перемещается над элементом div.onmouseenter
: происходит только когда указатель мыши входит в элемент div.onmouseover
: происходит, когда указатель мыши входит в элемент div и его дочерние элементы (p и span).источник
<script>
jsfiddle.net/orc8empdСтарый вопрос, но все еще нет хорошего актуального ответа с пониманием IMO.
В наши дни все браузеры поддерживают
mouseover/mouseout
иmouseenter/mouseleave
. Тем не менее, jQuery не регистрирует ваш обработчикmouseenter/mouseleave
, но молча помещает их в обертки,mouseover/mouseout
как показано в следующем коде, и дает свою немного отличную интерпретациюmouseenter/mouseleave
.Точное поведение событий особенно важно для «обработчиков делегатов». К сожалению, jQuery также имеет свою собственную интерпретацию того, что представляют собой обработчики делегатов и что они должны получать для событий. Этот факт показан в другом ответе для более простого события щелчка.
Итак, как правильно ответить на вопрос о jQuery, который использует формулировку Javascript для событий и обработчиков, но делает оба отличия и даже не упоминает об этом в своей документации?
Сначала различия в «реальном» Javascript:
enter/over
получает соответствующийleave/out
(возможно поздно / нервный)mouseenter/mouseleave
mouseover/mouseout
После некоторого тестирования это показывает, что пока вы не используете jQuery «делегировать обработчики с регистрацией селектора», эмуляция не нужна, но разумна: она отфильтровывает
mouseover/mouseout
события, которые amouseenter/mouseleave
не получит. Цель перепутана, хотя. Реальныйmouseenter/mouseleave
даст элемент обработчика в качестве цели, эмуляция может указывать на потомок этого элемента, то есть независимо отmouseover/mouseout
проводимого.Показать фрагмент кода
источник