Existe uma maneira de detectar se a propriedade css "display" de um elemento é alterada (para nenhum ou bloco ou bloco embutido ...)? se não, algum plugin? obrigado
fonte
Existe uma maneira de detectar se a propriedade css "display" de um elemento é alterada (para nenhum ou bloco ou bloco embutido ...)? se não, algum plugin? obrigado
Nota
Os eventos de mutação foram descontinuados desde que esta postagem foi escrita e podem não ser suportados por todos os navegadores. Em vez disso, use um observador de mutação .
Sim você pode. O módulo DOM L2 Events define eventos de mutação ; um deles - DOMAttrModified é o que você precisa. Concedido, eles não são amplamente implementados, mas são suportados pelo menos nos navegadores Gecko e Opera.
Experimente algo neste sentido:
document.documentElement.addEventListener('DOMAttrModified', function(e){
if (e.attrName === 'style') {
console.log('prevValue: ' + e.prevValue, 'newValue: ' + e.newValue);
}
}, false);
document.documentElement.style.display = 'block';
Você também pode tentar utilizar o evento "propertychange" do IE como um substituto para DOMAttrModified
. Deve permitir detectar style
mudanças de forma confiável.
class
atributo (ou qualquer outro atributo se os seletores de atributo estiverem presentes no CSS) de um ancestral do elemento também pode alterar o elemento, então você terá que lidar com todos osDOMAttrModified
eventos no elemento raiz do documento para certifique-se de pegar tudo.Você pode usar o plugin Attrchange jQuery . A principal função do plugin é vincular uma função de ouvinte na mudança de atributo dos elementos HTML.
Amostra de código:
fonte
Você pode usar a
css
função jQuery para testar as propriedades CSS, por exemplo.if ($('node').css('display') == 'block')
.Colin está certo, que não há nenhum evento explícito que seja disparado quando uma propriedade CSS específica é alterada. Mas você pode ser capaz de inverter e disparar um evento que define a exibição e tudo mais.
Considere também o uso de classes CSS para obter o comportamento desejado. Freqüentemente, você pode adicionar uma classe a um elemento que o contém e usar CSS para afetar todos os elementos. Costumo colocar uma classe no elemento body para indicar que uma resposta AJAX está pendente. Então, posso usar seletores CSS para obter a exibição que desejo.
Não tenho certeza se é isso que você está procurando.
fonte
Para propriedades para as quais a transição css afetará, pode usar o evento transactionend, por exemplo, para z-index:
fonte
Você não pode. CSS não suporta "eventos". Atrevo-me a perguntar para que você precisa? Confira esse post aqui no SO. Não consigo pensar em uma razão pela qual você gostaria de conectar um evento a uma mudança de estilo. Estou assumindo aqui que a mudança de estilo é desencadeada em algum outro lugar por um pedaço de javascript. Por que não adicionar lógica extra lá?
fonte