Гарантирование события onmouseout для пожара

В настоящее время я разрабатываю веб-приложение и сталкиваюсь с небольшими проблемами. Я использую ExtJS, но я считаю, что это общий вопрос JS.

Когда курсор входит в элемент HTML, событие onmouseover запускается, когда курсор покидает этот элемент, срабатывает onmouseout. Все идет нормально. К сожалению, кажется, что нельзя полностью полагаться на это поведение. Очень быстрые движения мыши могут привести к тому, что событие не срабатывает (например, перемещение курсора с помощью планшета для пера).

Каковы наилучшие методы решения этих проблем? Нужно ли отслеживать все события onmousemove и вручную отслеживать, где был последний курсор, и запустить соответствующее событие onmouseout?

Ответ 1

Это распространенная проблема, и ее нетривиально решать. Это практически невозможно решить, пытаясь обработать mouseover/out на уровне отдельных элементов. Используя Ext JS, как правило, целесообразно использовать делегированную обработку событий, когда это возможно, что также может помочь в отслеживании событий мыши. Например, монитор для мыши/выхода на самом высоком уровне возможен, и проверьте цель и/или связанную цель (свойства объекта события, переданные в вашу функцию обработки), чтобы выяснить, какие элементы задействованы во время любого данного события (я сделал это сам - это может стать сложным, но эффективным). Если ваш прецедент наблюдает за допустимыми сценариями перетаскивания, классы DragZone и DropZone были разработаны для этого.

Если вы можете заполнить более подробную информацию о том, что вы пытаетесь выполнить, это может помочь.

Ответ 2

У меня была аналогичная проблема раньше, и я использовал эту технику. Это может не помочь в ситуациях, когда вы перемещаете курсор с помощью планшета для пера, мне не нужно проверять, что бы я мог, но вы можете предположить, что это ненормальное явление, если вы ориентируетесь на обычных веб-пользователей. Дайте мне знать, если это сработает - если нет, я посмотрю, смогу ли я помочь больше.

Мартын