Почему события jQuery mouseenter запускаются в неуказанном порядке? - PullRequest
1 голос
/ 16 апреля 2011

У меня есть 3 div, содержащие друг друга, как Матрешка .

Для всех div, у меня есть функция, связанная с событием mousenter.Теперь перемещение мыши медленно снизу и вход в третий слой приведут к следующим событиям:

  1. Мышь в первом слое
  2. Мышиный слой два
  3. Мышиный слой три

Это идеально, и ожидаемый результат, так как вам нужно сначала войти в слой один, чтобы войти в слой два, и т. Д.

Однако, если я сделаю то же самое с быстрым движением мыши, порядок будет неопределенным, например:

  1. Мышь, входящий во второй слой
  2. Мышь в первом слое
  3. Мышь во втором слое

Что для меня не имеет особого смысла - как ваша мышь может войти во второй слой раньше вход в первый слой?

В любом случае, вопрос: есть ли способ заставить jQuery или javascript вообще запускать эти события в их естественном порядке?Если нет, можете ли вы предложить мне обходной путь, например, как-нибудь опубликовать сортировку событий из моей функции обработчика событий и отложить те, которые были вызваны преждевременно? *

Тестовый код размещен на http://jsbin.com/ibepu6/4/

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Обычно события mouseenter и mouseleave являются событиями на базе Microsoft, jquery делает их пригодными для использования во всех браузерах, использующих другие функции для создания этого эффекта ... Сначала создайте петлю и протестируйте демонстрацию на странице jquery .Я не проверяю источник jquery, но в javascript есть два механизма упорядочения различных событий, насколько я знаю ... Захват событий и всплывающие события ...

Этот документ не являетсяновый, но он описывает основы, которые вам нужны. Это более старый документ о событиях мыши и о том, как они выполняются ...

Итак, проверьте источник jquery и посмотрите, как работает mouseenter и mouseleave.Как я уже говорил, это не базовая функция, которая выполняется только в IE, а симуляция, которая действует подобно событиям mouseenter и mouseleave, используя другие функции javascript ... Вот как jquery объединяет эти два события Microsoft, доступные для всех браузеров..

0 голосов
/ 20 апреля 2011

Я отредактировал ваш код в Jsbin, чтобы опубликовать сортировку вызываемых событий. Я не уверен, что это вообще полезно для вашего случая, но вот код Отредактированный Jsbin

0 голосов
/ 16 апреля 2011

проблема в том, что:

вы ни в коем случае не можете подвести вашу мышь непосредственно к третьему слою, поскольку он находится внутри второго, который находится внутри первого.есть видимые части второго и первого слоя.

Независимо от того, как быстро вы двигаете мышь, она все равно будет срабатывать первой или второй перед третьей.Для этого нет очевидного решения, видимая наведение мыши на второй и первый слои всегда будет вызывать наложение второй и первой мыши перед третьим.Если вы двигаетесь очень быстро, этот порядок можно изменить, но он не может быть последовательным.

...