Estou usando o jQuery no meu site e gostaria de acionar determinadas ações quando uma determinada div é visível.
É possível anexar algum tipo de manipulador de eventos "isvisible" a divs arbitrários e executar um determinado código quando a div fica visível?
Gostaria de algo como o seguinte pseudocódigo:
$(function() {
$('#contentDiv').isvisible(function() {
alert("do something");
});
});
O código de alerta ("faça alguma coisa") não deve ser acionado até que o contentDiv seja realmente visível.
Obrigado.
javascript
jquery
frankadelic
fonte
fonte
Respostas:
Você sempre pode adicionar ao método .show () original para não ter que acionar eventos toda vez que mostrar algo ou se precisar trabalhar com código herdado:
Extensão Jquery:
Exemplo de uso:
Isso efetivamente permite que você faça algo antes do Show e do AfterShow enquanto ainda executa o comportamento normal do método .show () original.
Você também pode criar outro método para não precisar substituir o método .show () original.
fonte
fadeTo
função não funciona corretamente após a implementação dessa funçãoO problema está sendo tratado pelos observadores de mutação do DOM . Eles permitem que você vincule um observador (uma função) a eventos de alteração de conteúdo, texto ou atributos de elementos dom.
Com o lançamento do IE11, todos os principais navegadores suportam esse recurso, consulte http://caniuse.com/mutationobserver
O código de exemplo é o seguinte:
fonte
Não há um evento nativo no qual você possa se conectar, mas você pode acionar um evento a partir do seu script depois de tornar a div visível usando o. função de gatilho
por exemplo
fonte
show()
for chamado de vários locais além do bloco de código discutido acima?onIsVisible
porque o uso de "isVisible" é um pouco ambíguo no momento.Você pode usar o plugin Live Query do jQuery . E escreva o código da seguinte maneira:
Então, toda vez que o contentDiv estiver visível, "faça alguma coisa" será alertado!
fonte
A solução da redsquare é a resposta certa.
Porém, como uma solução IN-THEORY, você pode escrever uma função que seleciona os elementos classificados por
.visibilityCheck
( nem todos os elementos visíveis ) e verificar seuvisibility
valor de propriedade; setrue
então faça alguma coisa.Posteriormente, a função deve ser realizada periodicamente usando a
setInterval()
função. Você pode parar o cronômetro usando aclearInterval()
chamada bem sucedida.Aqui está um exemplo:
Você também pode executar algumas melhorias de desempenho, no entanto, a solução é basicamente absurda para ser usada em ação. Assim...
fonte
display:none
?O código a seguir (extraído de http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/ ) permitirá que você o use
$('#someDiv').on('show', someFunc);
.fonte
el.apply(this, arguments)
para corrigir isso.Se você deseja acionar o evento em todos os elementos (e elementos filho) que são realmente visíveis, por $ .show, toggle, toggleClass, addClass ou removeClass:
E agora seu elemento:
Você pode adicionar substituições a funções adicionais do jQuery adicionando-as à matriz na parte superior (como "attr")
fonte
um gatilho de evento ocultar / mostrar com base na ideia de Glenns: alternar removido porque dispara mostrar / ocultar e não queremos 2fires para um evento
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 no seu exemplo:
fonte
Use pontos de interesse jQuery:
Outros exemplos no site dos jQuery Waypoints .
fonte
O que me ajudou aqui é o polyfill de especificação recente ResizeObserver :
Observe que é um navegador e um desempenho cruzado (sem pesquisa).
fonte
Eu fiz uma função setinterval simples para conseguir isso. Se o elemento com a classe div1 estiver visível, ele definirá div2 para estar visível. Não conheço um bom método, mas uma solução simples.
fonte
Você também pode tentar o plugin jQuery aparecem conforme mencionado no thread paralelo https://stackoverflow.com/a/3535028/741782
fonte
Este suporte facilita e aciona o evento após a animação! [testado no jQuery 2.2.4]
Inspirado por http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/
fonte
Basta ligar um gatilho ao seletor e colocar o código no evento de gatilho:
fonte
Há um plug-in jQuery disponível para assistir a alterações nos atributos DOM,
https://github.com/darcyclarke/jQuery-Watch-Plugin
O plugin envolve Tudo o que você precisa fazer é ligar o MutationObserver
Você pode usá-lo para assistir à div usando:
fonte
Espero que isso faça o trabalho da maneira mais simples:
fonte
Mudei o gatilho de evento hide / show do Catalint com base na ideia de Glenns. Meu problema era que eu tenho um aplicativo modular. Eu mudo entre os módulos que mostram e ocultam divs pais. Então, quando oculto um módulo e mostro outro, com o método dele, tenho um atraso visível quando troco entre os módulos. Às vezes, só preciso iluminar esse evento e em algumas crianças especiais. Decidi notificar apenas os filhos com a classe "displayObserver"
Então, quando uma criança deseja ouvir o evento "show" ou "hide", tenho que adicionar a classe "displayObserver" e, quando ela não deseja continuar ouvindo, eu removo a classe
Eu desejo ajuda
fonte
Uma maneira de fazer isso.
Funciona apenas nas alterações de visibilidade que são feitas pela alteração da classe css, mas também pode ser estendido para observar as alterações nos atributos.
fonte
minha solução:
exemplo de uso:
fonte
fonte
Esse controle automático de código não requer controle visível ou invisível da consulta
fonte