Quiero una función que me diga sobre qué elemento está el cursor del mouse.
Entonces, por ejemplo, si el mouse del usuario está sobre este área de texto (con id wmd-input
), la llamada window.which_element_is_the_mouse_on()
será funcionalmente equivalente a$("#wmd-input")
javascript
dom
mouse
Tom Lehman
fuente
fuente
event.target
o lo que seaevent.target
?event
es ni cómo llegó a serEn los navegadores más nuevos, puede hacer lo siguiente:
Eso le dará una NodeList de elementos sobre los que el mouse está actualmente en el orden del documento. El último elemento de la NodeList es el más específico, cada uno de los anteriores debe ser un padre, un abuelo, etc.
fuente
<li>
rato sobre otros<li>
elementos.$(':hover')
pero es básicamente lo mismo: jsfiddle.net/pmrotule/2pks4tf6(function(){ var q = document.querySelectorAll(":hover"); return q[q.length-1]; })()
mousemove
podría afectar el rendimientoAunque es posible que lo siguiente no responda realmente a la pregunta, ya que este es el primer resultado de la búsqueda en Google (es posible que el usuario no haga exactamente la misma pregunta :), espero que proporcione información adicional.
En realidad, hay dos enfoques diferentes para obtener una lista de todos los elementos sobre los que se encuentra actualmente el mouse (para los navegadores más nuevos, tal vez):
El enfoque "estructural": árbol DOM ascendente
Como en la respuesta de Dherman, uno puede llamar
Sin embargo, esto supone que solo los hijos se superpondrán a sus antepasados, lo que suele ser el caso, pero no es cierto en general, especialmente cuando se trata de SVG, donde los elementos en diferentes ramas del árbol DOM pueden superponerse entre sí.
El enfoque "visual": basado en la superposición "visual"
Este método utiliza
document.elementFromPoint(x, y)
para encontrar el elemento superior, ocultarlo temporalmente (ya que lo recuperamos inmediatamente en el mismo contexto, el navegador no lo renderizará), luego busca el segundo elemento superior ... Parece un poco hacky, pero devuelve lo que espera cuando hay, por ejemplo, elementos hermanos en un árbol ocluyéndose entre sí. Encuentre esta publicación para obtener más detalles,Pruebe ambos y compruebe sus diferentes rendimientos.
fuente
Document.elementsFromPoint(x, y)
stackoverflow.com/a/31805883/1059828elementFromPoint()
obtiene solo el primer elemento en el árbol DOM. En su mayoría, esto NO es suficiente para las necesidades de los desarrolladores. Para obtener más de un elemento en, por ejemplo, la posición actual del puntero del mouse, esta es la función que necesita:Esto devuelve una matriz de todos los objetos de elemento bajo el punto dado. Simplemente pase los valores X e Y del mouse a esta función.
Más info aquí: https://developer.mozilla.org/en-US/docs/Web/API/document/elementsFromPoint
Para navegadores muy antiguos que no son compatibles, puede usar esta respuesta como alternativa.
fuente
La burbuja de eventos al pasar el mouse sobre el mouse, por lo que puede poner un solo oyente en el cuerpo y esperar a que aparezcan, luego agarre
event.target
oevent.srcElement
:fuente
document.elementFromPoint(x, y)
.El siguiente código le ayudará a obtener el elemento del puntero del mouse. Los elementos resultantes se mostrarán en la consola.
fuente
e.clientX
y en sue.clientY
lugar (probado en Firefox 59).Puede ver el objetivo del
mouseover
evento en algún antepasado adecuado:Aquí tienes una demostración.
fuente
fuente
DEMO: D Mueva el mouse en la ventana del fragmento: D
fuente
El objetivo del
mousemove
evento DOM es el elemento DOM más alto debajo del cursor cuando se mueve el mouse:Esto es similar a la solución de @Philip Walton, pero no requiere jQuery o setInterval.
fuente
Puede usar este selector para infravalorar el objeto y luego manipularlo como un objeto jquery.
$(':hover').last();
fuente
Permítanme comenzar diciendo que no recomiendo usar el método que estoy a punto de sugerir. Es mucho mejor usar evento impulsado el desarrollo y se unen sólo los eventos a los elementos de los que está interesado en saber si el ratón está sobre con
mouseover
,mouseout
,mouseenter
,mouseleave
, etc.Si absolutamente DEBE tener la capacidad de saber en qué elemento está el mouse, necesitaría escribir una función que vincule el
mouseover
evento a todo en el DOM, y luego almacenar el elemento actual en alguna variable.Podrías algo como esto:
Básicamente, he creado una función inmediata que establece el evento en todos los elementos y almacena el elemento actual dentro del cierre para minimizar su huella.
Aquí hay una demostración funcional que llama
window.which_element_is_the_mouse_on
cada segundo y registra qué elemento se encuentra actualmente en la consola.http://jsfiddle.net/LWFpJ/1/
fuente
Pregunta vieja, pero aquí hay una solución para aquellos que todavía pueden estar luchando. Desea agregar un
mouseover
evento en el elemento 'principal' de los elementos secundarios que desea detectar. El siguiente código le muestra cómo hacerlo.DEMO EN CODEPEN
fuente