Tengo un div
que tiene background:transparent
, junto con border
. Debajo de estodiv
, tengo más elementos.
Actualmente, puedo hacer clic en los elementos subyacentes cuando hago clic fuera de la superposición div
. Sin embargo, no puedo hacer clic en los elementos subyacentes cuando hago clic directamente en la superposición div
.
Quiero poder hacer clic en esto div
para poder hacer clic en los elementos subyacentes.
También es bueno saberlo ...
Puede deshabilitar los eventos de puntero en un elemento primario (probablemente div transparente) pero aún así habilitarlo para sus elementos secundarios.
Esto es útil si trabaja con múltiples capas div superpuestas, donde desea poder hacer clic en elementos secundarios, mientras que las capas primarias no reaccionan ante ningún evento del mouse.
Para esto, se obtienen todos los divs de crianza
pointer-events: none
y sus hijos en los que se puede hacer clic se vuelven a habilitar eventos de puntero porpointer-events: auto
fuente
Permitir que el usuario haga clic en un
div
elemento subyacente depende del navegador. Todos los navegadores modernos, incluidos Firefox, Chrome, Safari y Opera, entiendenpointer-events:none
.Para IE, depende del fondo. Si el fondo es transparente, el clic funciona sin que tenga que hacer nada. Por otro lado, para algo así
background:white; opacity:0; filter:Alpha(opacity=0);
, IE necesita reenvío manual de eventos.Vea una prueba JSFiddle y eventos de puntero CanIUse .
fuente
Estoy agregando esta respuesta porque no la vi aquí por completo. Pude hacer esto usando elementFromPoint. Así que básicamente:
En mi caso, el div superpuesto está en una posición absoluta; no estoy seguro de si esto hace la diferencia. Esto funciona en IE8 / 9, Safari Chrome y Firefox al menos.
fuente
fuente
$('#elementontop)
debería ser$('#elementontop')
?Necesitaba hacer esto y decidí tomar esta ruta:
fuente
Actualmente trabajo con globos de discurso de lona. Pero debido a que el globo con el puntero está envuelto en un div, algunos enlaces debajo ya no pueden hacer clic. No puedo usar extjs en este caso. Ver ejemplo básico para mi tutorial de globo de discurso requiere HTML5
Así que decidí recopilar todas las coordenadas del enlace desde el interior de los globos en una matriz.
Llamo a esta función en cada (nuevo) globo. Toma las coordenadas de las esquinas izquierda / superior y derecha / abajo de un enlace. Clase: además, el atributo de nombre de qué hacer si alguien hace clic en esas coordenadas y me encantó establecer un 1, lo que significa que no se hizo clic en chorro . Y desplace esta matriz a la matriz de clics. Podrías usar push también.
Para trabajar con esa matriz:
Esta función prueba las coordenadas de un evento de clic en el cuerpo o si ya se hizo clic y devuelve el atributo de nombre. Creo que no es necesario profundizar, pero ya ves que no es tan complicado. Hope in was enlish ...
fuente
No funciona de esa manera. la solución consiste en verificar manualmente las coordenadas del clic del mouse contra el área ocupada por cada elemento.
el área ocupada por un elemento se puede encontrar encontrando 1. obteniendo la ubicación del elemento con respecto a la parte superior izquierda de la página, y 2. el ancho y la altura. una biblioteca como jQuery lo hace bastante simple, aunque se puede hacer en js simple. agregar un controlador de eventos para
mousemove
eldocument
objeto proporcionará actualizaciones continuas de la posición del mouse desde la parte superior e izquierda de la página. decidir si el mouse está sobre cualquier objeto dado consiste en verificar si la posición del mouse está entre los bordes izquierdo, derecho, superior e inferior de un elemento.fuente
No, no puedes hacer clic a través de un elemento. Puede obtener las coordenadas del clic e intentar determinar qué elemento estaba debajo del elemento en el que se hizo clic, pero esto es realmente tedioso para los navegadores que no lo tienen
document.elementFromPoint
. Luego, aún debe emular la acción predeterminada de hacer clic, que no es necesariamente trivial dependiendo de los elementos que tenga debajo.Como tiene un área de ventana totalmente transparente, probablemente sea mejor implementarlo como elementos de borde separados alrededor del exterior, dejando el área central libre de obstrucciones para que realmente pueda hacer clic directamente.
fuente
Otra idea para intentar (situacionalmente) sería:
¿Alguna idea?
fuente
Creo que puedes considerar cambiar tu marcado. Si no me equivoco, le gustaría poner una capa invisible sobre el documento y su marcado invisible puede estar precediendo a la imagen de su documento (¿es esto correcto?).
En cambio, le propongo que coloque lo invisible justo después de la imagen del documento pero que cambie la posición a absoluta.
Tenga en cuenta que necesita un elemento padre para tener position: relative y luego podrá usar esta idea. De lo contrario, su capa absoluta se colocará justo en la esquina superior izquierda.
Espero que esto ayude. Consulte aquí para obtener más información sobre el posicionamiento CSS.
fuente
Simplemente envuelva la
a
etiqueta alrededor de todo el extracto HTML, por ejemploen mi ejemplo, mi clase de subtítulos tiene efectos de desplazamiento, que con eventos de puntero: ninguno; solo perderás
envolver el contenido mantendrá sus efectos de desplazamiento y puede hacer clic en toda la imagen, div incluido, saludos!
fuente
Puede colocar una superposición AP como ...
simplemente colóquelo donde no quiera, es decir, haga clic. Funciona en todos.
fuente
Una forma más fácil sería alinear la imagen de fondo transparente utilizando URI de datos de la siguiente manera:
fuente
Creo que también
event.stopPropagation();
debería mencionarse aquí. Agregue esto a la función Click de su botón.Impide que el evento forme burbujas en el árbol DOM, evitando que los controladores principales sean notificados del evento.
fuente
Esta no es una respuesta precisa para la pregunta, pero puede ayudarlo a encontrar una solución.
Tenía una imagen que estaba ocultando en la carga de la página y que se mostraba cuando esperaba una llamada AJAX y luego la ocultaba de nuevo ...
Encontré la única forma de mostrar mi imagen al cargar la página, luego hacerla desaparecer y poder hacer clic en las cosas donde estaba ubicada la imagen antes de ocultarla era poner la imagen en un DIV, hacer que el tamaño del DIV sea de 10x10 píxeles o pequeño suficiente para evitar que cause un problema y luego ocultar el div que contiene. Esto permitió que la imagen desbordara el div mientras estaba visible y cuando el div estaba oculto, solo el área de divs se veía afectada por la incapacidad de hacer clic en los objetos debajo y no por el tamaño completo de la imagen que el DIV contenía y mostraba.
Intenté todos los métodos para ocultar la imagen, incluida CSS display = none / block, opacity = 0, ocultando la imagen con hidden = true. Todos ellos hicieron que mi imagen se ocultara, pero el área donde se mostraba actuaba como si hubiera una cubierta sobre las cosas debajo, por lo que los clics y demás no actuarían sobre los objetos subyacentes. Una vez que la imagen estaba dentro de un pequeño DIV y escondí el pequeño DIV, todo el área ocupada por la imagen estaba clara y solo el área pequeña debajo del DIV que escondí se vio afectada, pero como lo hice lo suficientemente pequeño (10x10 píxeles), el problema fue corregido (más o menos).
Encontré que esto es una solución sucia para lo que debería ser un problema simple, pero no pude encontrar ninguna forma de ocultar el objeto en su formato nativo sin un contenedor. Mi objeto era en forma de etc. Si alguien tiene una mejor manera, hágamelo saber.
fuente