Estoy tratando de capturar eventos del mouse en un elemento con otro elemento absolutamente posicionado encima.
En este momento, los eventos en el elemento en una posición absoluta lo golpean y burbujean hasta su padre, pero quiero que sea "transparente" para estos eventos del mouse y reenviarlos a lo que esté detrás de él. ¿Cómo debo implementar esto?
pointer-events
existiera! Puedo cambiar la respuesta aceptada a esta en algún momento.pointer-events
todavía no es súper impresionante , pero está mejorando. Para una opción más compatible, vaya con la respuesta de @ JedSchmidt.Si todo lo que necesita es el mousedown, puede hacerlo con el
document.elementFromPoint
método de la siguiente manera:x
yy
del evento aldocument.elementFromPoint
método para obtener el elemento debajo, y luegofuente
También es bueno saber ...
Los eventos de puntero se pueden deshabilitar para un elemento primario (probablemente div transparente) y, sin embargo, se pueden habilitar para elementos secundarios. Esto es útil si trabaja con varias capas div superpuestas, donde desea poder hacer clic en los elementos secundarios de cualquier capa. Para esto, todos los divs parenting obtienen
pointer-events: none
y click-children obtienen eventos de puntero reactivados porpointer-events: all
fuente
pointer-events:none
y la inminente decepción de tener niños afectados de nodos, salvas el día :).parent * { pointer-events:all; }
para niños?La razón por la que no está recibiendo el evento es porque el elemento en posición absoluta no es un elemento secundario del elemento que desea "hacer clic" (div azul). La forma más clara en la que puedo pensar es poner el elemento absoluto como hijo del que desea hacer clic, pero supongo que no puede hacer eso o no habría publicado esta pregunta aquí :)
Otra opción sería registrar un controlador de evento de clic para el elemento absoluto y llamar al controlador de clic para el div azul, haciendo que ambos parpadeen.
Debido a la forma en que los eventos surgen a través del DOM, no estoy seguro de que haya una respuesta más simple para ti, ¡pero tengo mucha curiosidad si alguien más tiene algún truco que no conozca!
fuente
Hay una versión de JavaScript disponible que redirige manualmente los eventos de un div a otro.
Lo limpié y lo convertí en un complemento jQuery.
Aquí está el repositorio de Github: https://github.com/BaronVonSmeaton/jquery.forwardevents
Desafortunadamente, el propósito para el que lo estaba usando: la superposición de una máscara sobre Google Maps no capturó los eventos de clic y arrastre, y el cursor del mouse no cambia, lo que degrada la experiencia del usuario lo suficiente como para que decidiera ocultar la máscara debajo de IE y Opera. los dos navegadores que no admiten eventos de puntero.
fuente
Si conoce los elementos que necesitan eventos del mouse, y si su superposición es transparente, puede establecer el índice z de ellos en algo más alto que la superposición. Por supuesto, todos los eventos deberían funcionar en ese caso en todos los navegadores.
fuente