Мне нужна функция, которая сообщала бы мне, над каким элементом находится курсор мыши.
Так, например, если указатель мыши находится над этим текстовым полем (с идентификатором wmd-input
), вызов window.which_element_is_the_mouse_on()
будет функционально эквивалентен $("#wmd-input")
.
javascript
dom
mouse
Том Леман
источник
источник
event.target
или что-то ещеevent.target
?event
такое и как оно появилосьВ более новых браузерах вы могли делать следующее:
Это даст вам список NodeList элементов, над которыми в данный момент находится указатель мыши, в порядке документа. Последний элемент в NodeList является наиболее конкретным, каждый предшествующий элемент должен быть родителем, дедушкой и дедушкой и так далее.
источник
<li>
время перетаскивал поверх других<li>
элементов.$(':hover')
но в основном это то же самое: jsfiddle.net/pmrotule/2pks4tf6(function(){ var q = document.querySelectorAll(":hover"); return q[q.length-1]; })()
mousemove
может повредить производительностьХотя нижеследующее может фактически не отвечать на вопрос, поскольку это первый результат поиска в Google (гуглер может не задавать точно такой же вопрос :), надеюсь, он предоставит дополнительные данные.
На самом деле существует два разных подхода к получению списка всех элементов, над которыми в данный момент находится мышь (возможно, для новых браузеров):
«Структурный» подход - восходящее дерево DOM
Как и в ответе Дхермана , можно позвонить
Однако это предполагает, что только дочерние элементы будут перекрывать своих предков, что обычно имеет место, но в целом неверно, особенно при работе с SVG, где элементы в разных ветвях дерева DOM могут перекрывать друг друга.
«Визуальный» подход - основан на «визуальном» перекрытии.
Этот метод используется,
document.elementFromPoint(x, y)
чтобы найти самый верхний элемент, временно скрыть его (поскольку мы восстанавливаем его немедленно в том же контексте, браузер фактически не будет его отображать), а затем перейдите к поиску второго самого верхнего элемента ... Выглядит немного хакерским, но он возвращает то, что вы ожидаете, когда есть, например, элементы-братья и сестры в дереве, перекрывающие друг друга. Пожалуйста, найдите этот пост для более подробной информации,Попробуйте оба варианта и проверьте их разные варианты возврата.
источник
Document.elementsFromPoint(x, y)
stackoverflow.com/a/31805883/1059828elementFromPoint()
получает только первый элемент в дереве DOM. Чаще всего этого недостаточно для нужд разработчиков. Чтобы получить более одного элемента, например, в текущей позиции курсора мыши, вам нужна следующая функция:Это возвращает массив всех объектов элементов в данной точке. Просто передайте этой функции значения X и Y мыши.
Дополнительная информация здесь: DocumentOrShadowRoot.elementsFromPoint ()
Для очень старых браузеров, которые не поддерживаются, вы можете использовать этот ответ как запасной вариант.
источник
События при наведении указателя мыши всплывают, поэтому вы можете поместить одного слушателя в тело и дождаться, пока они всплывут, а затем нажмите
event.target
илиevent.srcElement
:источник
document.elementFromPoint(x, y)
.Следующий код поможет вам получить элемент указателя мыши. Полученные элементы отобразятся в консоли.
источник
e.clientX
иe.clientY
вместо (проверено в Firefox 59).Вы можете посмотреть цель
mouseover
события на подходящем предке:Вот демо.
источник
источник
Демо: D
Наведите указатель мыши на окно фрагмента: D
источник
Целью
mousemove
события DOM является самый верхний элемент DOM под курсором при перемещении мыши:Это похоже на решение @Philip Walton, но не требует jQuery или setInterval.
источник
Вы можете использовать этот селектор, чтобы скрыть объект, а затем управлять им как объектом jQuery:
источник
Вот решение для тех, кто все еще борется. Вы хотите добавить
mouseover
событие в «родительский» элемент дочернего элемента (ов), который вы хотите обнаружить. В приведенном ниже коде показано, как это сделать.Демо на CodePen
источник
Позвольте мне начать с того, что я не рекомендую использовать метод, который собираюсь предложить. Это гораздо лучше использовать событие с приводом развития и привязки событий только к элементам , которые вы заинтересованы в знании или не мышь находится над с
mouseover
,mouseout
,mouseenter
,mouseleave
и т.д.Если вам абсолютно необходимо знать, над каким элементом находится мышь, вам нужно написать функцию, связывающую
mouseover
событие ко всему в DOM, а затем сохраняет то, что текущий элемент находится в некоторой переменной.Можно было вот так:
По сути, я создал немедленную функцию, которая устанавливает событие для всех элементов и сохраняет текущий элемент внутри замыкания, чтобы минимизировать ваш след.
Вот рабочая демонстрация, которая вызывает
window.which_element_is_the_mouse_on
каждую секунду и записывает, какой элемент в данный момент находится на консоли.http://jsfiddle.net/LWFpJ/1/
источник