Мне нужно знать, когда курсор мыши покидает div
. Так что я подключаю событие mouseout
. Однако, если я очень быстро вывожу мышь из div
, событие mouseout
не сработает . Правильно: курсор мыши был неподвижно внутри div
, теперь он снаружи div
, и, тем не менее, обратный вызов mouseout
не был вызван. (Работает нормально, если я не так быстро двигаю мышь.)
Кстати, это верно в последней версии Google Chrome , поэтому проблема не только в "старых браузерах".
Обходной путь:
Вопрос об этой проблеме был задан до . По-видимому, это просто факт жизни, и единственный найденный мной обходной путь - это вручную отслеживать mousemove
события, каждый раз проверяя координаты курсора x / y и проверяя, попадают ли они в ограничивающую рамку div
. Таким образом, у вас больше шансов «заметить», если курсор больше не находится внутри него.
По сравнению с тем, как позволить браузеру делать все это изначально, выполнение вычислений при каждом перемещении пикселя является небольшим ударом по производительности. Это также утомительно для кода.
На мой вопрос ...
Почему не может браузер не может надежно зафиксировать событие mouseout
? Если я могу достоверно определить, когда мышь вышла из div
, используя вышеуказанный обходной путь, почему браузер не может это сделать?
Я понимаю (из ответа, приведенного выше), что JavaScript не пытается интерполировать "фреймы". Скажем, если вы поместите обработчик mousemove
на document
и быстро переместите мышь на 200 пикселей вправо по идеальной горизонтальной линии, вы можете , а не получить 200 mousemove
событий. Некоторые будут пропущены. У меня нет проблем с этим.
Но если некоторые движения пикселей пропускаются, когда мышь пересекает границу div
, почему из этого следует, что событие mouseout
также должно быть пропущено? Когда браузер наконец начинает регистрировать положение мыши снова (после внезапного быстрого движения), даже если мышь теперь находится на расстоянии миль вне коробки, смысл в том, что она раньше находилась в коробке и больше не . Так почему же тогда он не запускает событие mouseout?
Я просто не понимаю, почему поставщикам браузеров будет трудно решить эту проблему. (Но я верю, что может быть веская причина, о которой я слишком глуп, чтобы думать.)
Я публикую этот вопрос в основном из любопытства, но надеюсь, что ответ может дать некоторую информацию, которая поможет мне более эффективно обойти проблему. Кроме того, любые альтернативные обходные пути (которые быстрее, чем представленный выше) будут приветствоваться.