Existe-t-il un moyen de détecter si la propriété css "afficher" d'un élément est modifiée (en absence ou en bloc ou en bloc en ligne ...)? sinon, un plugin? Merci
91
Existe-t-il un moyen de détecter si la propriété css "afficher" d'un élément est modifiée (en absence ou en bloc ou en bloc en ligne ...)? sinon, un plugin? Merci
Remarque
Les événements de mutation sont obsolètes depuis la rédaction de cet article et peuvent ne pas être pris en charge par tous les navigateurs. Utilisez plutôt un observateur de mutation .
Oui, vous pouvez. Le module Evénements DOM L2 définit les événements de mutation ; l'un d'entre eux - DOMAttrModified est celui dont vous avez besoin. Certes, ceux-ci ne sont pas largement mis en œuvre, mais sont pris en charge au moins dans les navigateurs Gecko et Opera.
Essayez quelque chose du genre:
document.documentElement.addEventListener('DOMAttrModified', function(e){
if (e.attrName === 'style') {
console.log('prevValue: ' + e.prevValue, 'newValue: ' + e.newValue);
}
}, false);
document.documentElement.style.display = 'block';
Vous pouvez également essayer d'utiliser l'événement "propertychange" d'IE en remplacement de DOMAttrModified
. Il doit permettre de détecter les style
changements de manière fiable.
class
attribut (ou tout autre attribut si des sélecteurs d'attribut sont présents dans le CSS) d'un ancêtre de l'élément pourrait également changer l'élément, vous devrez donc gérer tous lesDOMAttrModified
événements de l'élément racine du document en assurez-vous de tout attraper.Vous pouvez utiliser le plugin attrchange jQuery . La fonction principale du plugin est de lier une fonction d'écoute lors du changement d'attribut des éléments HTML.
Exemple de code:
la source
Vous pouvez utiliser la
css
fonction de jQuery pour tester les propriétés CSS, par exemple.if ($('node').css('display') == 'block')
.Colin a raison, qu'il n'y a pas d'événement explicite qui est déclenché lorsqu'une propriété CSS spécifique est modifiée. Mais vous pourrez peut-être le retourner et déclencher un événement qui définit l'affichage, etc.
Pensez également à ajouter des classes CSS pour obtenir le comportement souhaité. Souvent, vous pouvez ajouter une classe à un élément conteneur et utiliser CSS pour affecter tous les éléments. Je gifle souvent une classe sur l'élément body pour indiquer qu'une réponse AJAX est en attente. Ensuite, je peux utiliser des sélecteurs CSS pour obtenir l'affichage que je veux.
Je ne sais pas si c'est ce que vous recherchez.
la source
Pour les propriétés sur lesquelles la transition css affectera, vous pouvez utiliser l'événement transitionend, par exemple pour z-index:
la source
Vous ne pouvez pas. CSS ne prend pas en charge les «événements». Oserais-je vous demander pourquoi vous en avez besoin? Consultez cet article ici sur SO. Je ne peux pas penser à une raison pour laquelle vous voudriez relier un événement à un changement de style. Je suppose ici que le changement de style est déclenché ailleurs par un morceau de javascript. Pourquoi ne pas y ajouter une logique supplémentaire?
la source