Гарантирование события onmouseout для пожара
В настоящее время я разрабатываю веб-приложение и сталкиваюсь с небольшими проблемами. Я использую ExtJS, но я считаю, что это общий вопрос JS.
Когда курсор входит в элемент HTML, событие onmouseover
запускается, когда курсор покидает этот элемент, срабатывает onmouseout
. Все идет нормально. К сожалению, кажется, что нельзя полностью полагаться на это поведение. Очень быстрые движения мыши могут привести к тому, что событие не срабатывает (например, перемещение курсора с помощью планшета для пера).
Каковы наилучшие методы решения этих проблем? Нужно ли отслеживать все события onmousemove
и вручную отслеживать, где был последний курсор, и запустить соответствующее событие onmouseout
?
Ответы
Ответ 1
Это распространенная проблема, и ее нетривиально решать. Это практически невозможно решить, пытаясь обработать mouseover/out на уровне отдельных элементов. Используя Ext JS, как правило, целесообразно использовать делегированную обработку событий, когда это возможно, что также может помочь в отслеживании событий мыши. Например, монитор для мыши/выхода на самом высоком уровне возможен, и проверьте цель и/или связанную цель (свойства объекта события, переданные в вашу функцию обработки), чтобы выяснить, какие элементы задействованы во время любого данного события (я сделал это сам - это может стать сложным, но эффективным). Если ваш прецедент наблюдает за допустимыми сценариями перетаскивания, классы DragZone и DropZone были разработаны для этого.
Если вы можете заполнить более подробную информацию о том, что вы пытаетесь выполнить, это может помочь.
Ответ 2
У меня была аналогичная проблема раньше, и я использовал эту технику. Это может не помочь в ситуациях, когда вы перемещаете курсор с помощью планшета для пера, мне не нужно проверять, что бы я мог, но вы можете предположить, что это ненормальное явление, если вы ориентируетесь на обычных веб-пользователей. Дайте мне знать, если это сработает - если нет, я посмотрю, смогу ли я помочь больше.
Мартын