Eu tenho uma div que contém algum conteúdo que está sendo adicionado e removido dinamicamente, portanto, sua altura muda frequentemente. Eu também tenho uma div que está absolutamente posicionada diretamente abaixo do javascript, portanto, a menos que eu possa detectar quando a altura da div muda, não posso reposicionar a div abaixo dela.
Então, como posso detectar quando a altura dessa div muda? Suponho que exista algum evento jQuery que preciso usar, mas não tenho certeza em qual conectar.
javascript
jquery
Bob Somers
fonte
fonte
Respostas:
Use um sensor de redimensionamento da biblioteca css-element-queries:
https://github.com/marcj/css-element-queries
Ele usa uma abordagem baseada em eventos e não perde tempo com a CPU. Funciona em todos os navegadores, incl. IE7 +.
fonte
Eu escrevi um plugin em algum momento para o ouvinte attrchange que basicamente adiciona uma função de ouvinte na alteração de atributo. Embora eu o diga como um plug-in, na verdade é uma função simples escrita como um plugin jQuery .. então, se você quiser .. retire o código específico do plug-in e use as funções principais.
Nota: este código não usa polling
confira esta demonstração simples http://jsfiddle.net/aD49d/
Página do plug-in: http://meetselva.github.io/attrchange/
Versão reduzida: (1.68kb)
fonte
Você pode usar o evento DOMSubtreeModified
Mas isso será acionado mesmo que as dimensões não sejam alteradas, e reatribuir a posição sempre que disparar pode sofrer um impacto no desempenho. Na minha experiência usando esse método, verificar se as dimensões foram alteradas é menos caro e, portanto, você pode considerar combinar as duas.
Ou se você estiver alterando diretamente o div (em vez de o div ser alterado pela entrada do usuário de maneiras imprevisíveis, como se for contentEditable), você pode simplesmente disparar um evento personalizado sempre que o fizer.
Desvantagem: IE e Opera não implementam este evento.
fonte
Foi assim que eu lidei com esse problema recentemente:
Sei que estou alguns anos atrasado para a festa, acho que minha resposta pode ajudar algumas pessoas no futuro, sem precisar baixar nenhum plug-in.
fonte
Você pode usar
MutationObserver
classe.MutationObserver
fornece aos desenvolvedores uma maneira de reagir às alterações em um DOM. Ele foi projetado como um substituto para os Eventos de Mutação definidos na especificação de Eventos do DOM3.Exemplo ( origem )
fonte
Existe um plugin jQuery que pode lidar com isso muito bem
http://www.jqui.net/jquery-projects/jquery-mutate-official/
aqui está uma demonstração dele com diferentes cenários sobre quando a altura muda, se você redimensionar a div com borda vermelha.
http://www.jqui.net/demo/mutate/
fonte
setTimeout
, então seria 1ms + [tempo necessário para fazer as verificações] em suma, mas a ideia era ouvir constantemente, depois que você o acionasse novamente, é como uma fila. Estou certo de que poderia fazê-lo muito melhor, mas não muito tempo.Em resposta ao usuário007:
Se a altura do seu elemento estiver mudando devido à adição de itens a ele usando
.append()
você não precisará detectar a alteração na altura. Basta adicionar a reposição do seu segundo elemento na mesma função em que você está anexando o novo conteúdo ao seu primeiro elemento.Como em:
Exemplo de trabalho
fonte
Você pode criar um simples setInterval.
EDITAR:
Este é um exemplo com uma classe. Mas você pode fazer algo mais fácil.
fonte
Você pode usar isso, mas ele suporta apenas Firefox e Chrome.
fonte
Bastante básico, mas funciona:
fonte