Можно определить элемент под курсором мыши (т. Е. Самый верхний элемент) с помощью следующих методов:
- Прослушивание события
mousemove
.Цель: event.target
или document.elementFromPoint(event.clientX, event.clientY)
.
Это не работает при прокрутке пока мышь не двигается .Тогда мышь технически не двигается;таким образом, ни одно событие мыши не сработает.
К сожалению, оба метода, описанных выше, больше не применимы при прослушивании события scroll
.event.target
будет в зависимости от того, какой элемент прокручивается (или document
).Кроме того, позиция курсора мыши не отображается на объекте event
.
Как описано в , этот ответ на «Определите, какой элемент находится над указателем мыши в Javascript» , одинВозможным решением является запрос элемента hovered через псевдокласс CSS :hover
.
document.addEventListener('scroll', () => {
const hoverTarget = document.querySelector('.element:hover');
if (hoverTarget) {
hover(hoverTarget);
}
});
Однако это невозможно использовать, поскольку он очень неэффективен и неточен.Событие scroll
является одним из быстро запускаемых событий и должно быть замедлено при выполнении чего-либо незначительно дорогостоящего (например, запрос DOM).
Кроме того, элемент hovered отстает от , когдапрокрутки.Вы можете наблюдать это на любом веб-сайте с большим количеством ссылок: Наведите указатель мыши на одну из них и перейдите к другой ссылке, не перемещая мышь.Он обновляется только через несколько миллисекунд.
Есть ли способ, который может быть реализован красиво и эффективно?По сути, я хочу получить обратное значение mouseenter
: вместо того, чтобы знать, когда мышь входит и элемент, я хочу знать, когда элемент пересекается с мышью (например, когда мышь не перемещается, а элемент [т.е. при прокрутке]).