Eu tenho um div
que tem background:transparent
, junto com border
. Por trás disso div
, tenho mais elementos.
Atualmente, posso clicar nos elementos subjacentes quando clico fora da sobreposição div
. No entanto, não consigo clicar nos elementos subjacentes ao clicar diretamente na sobreposição div
.
Quero poder clicar nisso div
para poder clicar nos elementos subjacentes.
Também é bom saber ...
Você pode desativar os eventos de ponteiro em um elemento pai (provavelmente div transparente), mas ainda assim ele está ativado para seus elementos filhos.
Isso é útil se você trabalha com várias camadas div sobrepostas, nas quais deseja poder clicar em elementos filhos, enquanto as camadas pai não reagem a nenhum evento do mouse.
Para isso, todas as divs parentais recebem
pointer-events: none
e seus filhos clicáveis recebem eventos-ponteiro reativados porpointer-events: auto
fonte
Permitir que o usuário clique através de um
div
para o elemento subjacente depende do navegador. Todos os navegadores modernos, incluindo Firefox, Chrome, Safari e Opera, entendempointer-events:none
.Para o IE, isso depende do plano de fundo. Se o plano de fundo for transparente, o clique funcionará sem a necessidade de fazer nada. Por outro lado, para algo como
background:white; opacity:0; filter:Alpha(opacity=0);
, o IE precisa de encaminhamento manual de eventos.Veja um teste JSFiddle e eventos de ponteiro CanIUse .
fonte
Estou adicionando esta resposta porque não a vi aqui na íntegra. Consegui fazer isso usando o elementFromPoint. Então, basicamente:
No meu caso, a div de sobreposição está absolutamente posicionada - não tenho certeza se isso faz diferença. Isso funciona no IE8 / 9, Safari Chrome e Firefox pelo menos.
fonte
fonte
$('#elementontop)
devesse ser$('#elementontop')
?Eu precisava fazer isso e decidi seguir esse caminho:
fonte
Atualmente, trabalho com balões de fala em tela. Mas como o balão com o ponteiro está envolvido em uma div, alguns links abaixo dele não podem mais ser clicados. Eu não posso usar extjs neste caso. Veja o exemplo básico do meu tutorial de balão de fala requer HTML5
Então, decidi coletar todas as coordenadas do link de dentro dos balões em uma matriz.
Eu chamo essa função em cada (novo) balão. Ele pega as coordenadas dos cantos esquerdo / superior e direito / baixo de um link.class - adicionalmente, o atributo name para o que fazer se alguém clicar nessas coordenadas e eu adorei definir um 1, o que significa que não foi clicado. . E desvie essa matriz para a matriz de cliques. Você também pode usar push.
Para trabalhar com essa matriz:
Essa função prova as coordenadas de um evento de clique no corpo ou se ele já foi clicado e retorna o atributo name. Eu acho que não é necessário ir mais fundo, mas você vê que não é tão complicado. A esperança era enlish ...
fonte
não funciona assim. a solução é verificar manualmente as coordenadas do clique do mouse na área ocupada por cada elemento.
a área ocupada por um elemento pode ser encontrada por 1. obtendo a localização do elemento em relação à parte superior esquerda da página e 2. a largura e a altura. uma biblioteca como o jQuery torna isso bastante simples, embora possa ser feito em js simples. adicionar um manipulador de eventos
mousemove
nodocument
objeto fornecerá atualizações contínuas da posição do mouse na parte superior e esquerda da página. decidir se o mouse está sobre um objeto específico consiste em verificar se a posição do mouse está entre as bordas esquerda, direita, superior e inferior de um elemento.fonte
Não, você não pode clicar em um elemento. Você pode obter as coordenadas do clique e tentar descobrir qual elemento estava abaixo do elemento clicado, mas isso é realmente tedioso para navegadores que não possuem
document.elementFromPoint
. Então você ainda precisa emular a ação padrão de clicar, o que não é necessariamente trivial, dependendo de quais elementos você possui.Como você tem uma área de janela totalmente transparente, provavelmente será melhor implementá-la como elementos de borda separados ao redor do lado de fora, deixando a área central livre de obstruções, para que você possa simplesmente clicar diretamente.
fonte
Outra idéia para tentar (situacionalmente) seria:
Alguma ideia?
fonte
Eu acho que você pode considerar mudar sua marcação. Se não estiver errado, você gostaria de colocar uma camada invisível acima do documento e sua marcação invisível pode estar precedendo a imagem do documento (isso está correto?).
Em vez disso, proponho que você coloque o invisível logo após a imagem do documento, mas altere a posição para absoluto.
Observe que você precisa de um elemento pai para ter a posição: relativa e, em seguida, você poderá usar essa ideia. Caso contrário, sua camada absoluta será colocada no canto superior esquerdo.
Espero que isto ajude. Veja aqui para mais informações sobre o posicionamento CSS.
fonte
Apenas envolva a
a
tag em todo o extrato HTML, por exemplono meu exemplo, minha classe de legenda tem efeitos de foco, que com eventos-ponteiro: nenhum; você só vai perder
embrulhar o conteúdo manterá seus efeitos de foco e você pode clicar em toda a imagem, incluindo div, cumprimentos!
fonte
Você pode colocar uma sobreposição de AP como ...
basta colocá-lo onde você não quer, ou seja, clicou. Funciona em todos.
fonte
Uma maneira mais fácil seria alinhar a imagem de plano de fundo transparente usando os URIs de dados da seguinte maneira:
fonte
Eu acho que o
event.stopPropagation();
deve ser mencionado aqui também. Adicione isso à função Click do seu botão.Impede que o evento borbulhe na árvore DOM, impedindo que qualquer manipulador pai seja notificado sobre o evento.
fonte
Esta não é uma resposta precisa para a pergunta, mas pode ajudar a encontrar uma solução alternativa para ela.
Eu tinha uma imagem que eu estava escondendo no carregamento da página e exibindo ao esperar uma chamada AJAX e depois me ocultar novamente ...
Encontrei a única maneira de exibir minha imagem ao carregar a página e depois fazê-la desaparecer e poder clicar nas coisas em que a imagem estava localizada antes de ocultá-la, era para colocar a imagem em um DIV, fazer o tamanho do DIV 10x10 pixels ou pequeno o suficiente para evitar que isso cause um problema e ocultar a div que contém. Isso permitiu que a imagem transbordasse da div enquanto visível e quando a div estava oculta, apenas a área divs foi afetada pela incapacidade de clicar nos objetos abaixo e não no tamanho total da imagem que o DIV continha e estava sendo exibido.
Eu tentei todos os métodos para ocultar a imagem, incluindo CSS display = none / block, opacity = 0, ocultando a imagem com hidden = true. Todos eles resultaram na ocultação da minha imagem, mas a área em que ela foi exibida agia como se houvesse uma cobertura sobre o material por baixo, para que cliques e assim por diante não atuassem nos objetos subjacentes. Quando a imagem estava dentro de um DIV minúsculo e eu o escondi, toda a área ocupada pela imagem ficou nítida e apenas a pequena área sob o DIV que eu escondi foi afetada, mas como a tornei pequena o suficiente (10x10 pixels), o problema foi corrigido (mais ou menos).
Achei que era uma solução alternativa suja para o que deveria ser um problema simples, mas não consegui encontrar nenhuma maneira de ocultar o objeto em seu formato nativo sem um contêiner. Meu objeto estava na forma de etc. Se alguém tiver uma maneira melhor, informe-me.
fonte