Estou construindo uma barra de ferramentas que será incluída em uma página. o div no qual será incluído será exibido por padrão : nenhum . Existe uma maneira de colocar um ouvinte de eventos na minha barra de ferramentas para ouvir quando ele se tornar visível para que possa inicializar? ou terei que passar uma variável da página que o contém?
obrigado
javascript
JD Isaacks
fonte
fonte
Respostas:
Os eventos Javascript lidam com a interação do usuário , se o seu código estiver organizado o suficiente, você deve ser capaz de chamar a função de inicialização no mesmo lugar onde a visibilidade muda (ou seja, você não deve mudar
myElement.style.display
em muitos lugares, em vez disso, chame uma função / método que o faça isso e qualquer outra coisa que você queira).fonte
No futuro, a nova API HTML Intersection Observer é o que você está procurando. Ele permite que você configure um retorno de chamada que é chamado sempre que um elemento, chamado de destino, cruza a janela de visualização do dispositivo ou um elemento especificado. Ele está disponível nas versões mais recentes do Chrome, Firefox e Edge. Consulte https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API para obter mais informações.
Exemplo de código simples para observação da tela: nenhuma comutação:
Em ação: https://jsfiddle.net/elmarj/u35tez5n/5/
fonte
Posso estar um pouco atrasado, mas você poderia apenas usar o MutationObserver para observar quaisquer alterações no elemento desejado. Se ocorrer alguma alteração, você só terá que verificar se o elemento é exibido.
fonte
IntersectionObserver
- stackoverflow.com/a/52627221/2803743Existe pelo menos um caminho, mas não é muito bom. Você pode apenas pesquisar o elemento para mudanças como esta:
O padrão DOM também especifica eventos de mutação , mas nunca tive a chance de usá-los e não tenho certeza se eles são bem suportados. Você os usaria assim:
Este código está na minha cabeça, então não tenho certeza se funcionaria.
A melhor e mais fácil solução seria ter um retorno de chamada na função exibindo seu destino.
fonte
Eu tive esse mesmo problema e criei um plugin jQuery para resolvê-lo em nosso site.
https://github.com/shaunbowe/jquery.visibilityChanged
Aqui está como você o usaria com base em seu exemplo:
fonte
.is(':visible')
junto comsetTimeout
.Como @figha diz, se esta é sua própria página da web , você deve apenas executar o que for necessário para executar após tornar o elemento visível.
No entanto, para o propósito de responder à pergunta (e qualquer um que fizer extensões para Chrome ou Firefox , onde este é um caso de uso comum), Mutation Summary e Mutation Observer permitirão que as alterações do DOM acionem eventos.
Por exemplo, disparar um evento para um elemento com
data-widget
atributo sendo adicionado ao DOM. Pegando emprestado este excelente exemplo do blog de David Walsh :As respostas incluem
added
,removed
,valueChanged
e mais .valueChanged
inclui todos os atributos, incluindodisplay
etc.fonte
Você também pode tentar este plugin jQuery: https://github.com/morr/jquery.appear
fonte
Apenas para comentar sobre o suporte do navegador do listener de eventos DOMAttrModified:
Suporte para vários navegadores
Esses eventos não são implementados de forma consistente em diferentes navegadores, por exemplo:
O IE anterior à versão 9 não era compatível com os eventos de mutação e não implementava alguns deles corretamente na versão 9 (por exemplo, DOMNodeInserted)
O WebKit não é compatível com DOMAttrModified (consulte o bug 8191 do webkit e a solução alternativa)
"eventos de nome de mutação", ou seja, DOMElementNameChanged e DOMAttributeNameChanged não são suportados no Firefox (a partir da versão 11), e provavelmente em outros navegadores também.
Fonte: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events
fonte
minha solução:
por exemplo:
fonte