J'ai un div qui contient du contenu qui est ajouté et supprimé dynamiquement, donc sa hauteur change souvent. J'ai aussi un div qui est absolument positionné directement en dessous avec javascript, donc à moins que je ne puisse détecter quand la hauteur du div change, je ne peux pas repositionner le div en dessous.
Alors, comment puis-je détecter quand la hauteur de cette div change? Je suppose qu'il y a un événement jQuery que je dois utiliser, mais je ne sais pas à quel événement se connecter.
javascript
jquery
Bob Somers
la source
la source
Réponses:
Utilisez un capteur de redimensionnement de la bibliothèque css-element-queries:
https://github.com/marcj/css-element-queries
Il utilise une approche basée sur les événements et ne fait pas perdre de temps à votre processeur. Fonctionne dans tous les navigateurs, y compris. IE7 +.
la source
J'ai écrit un plugin il y a quelque temps pour attrchange listener qui ajoute essentiellement une fonction d'écoute sur le changement d'attribut. Même si je le dis comme un plugin, en fait c'est une simple fonction écrite comme un plugin jQuery .. donc si vous voulez .. supprimez le code spécifique du plugin et utilisez les fonctions de base.
Remarque: ce code n'utilise pas d'interrogation
consultez cette simple démo http://jsfiddle.net/aD49d/
Page du plugin: http://meetselva.github.io/attrchange/
Version réduite: (1.68kb)
la source
Vous pouvez utiliser l'événement DOMSubtreeModified
Mais cela se déclenchera même si les dimensions ne changent pas, et la réaffectation de la position chaque fois qu'elle se déclenche peut nuire aux performances. D'après mon expérience en utilisant cette méthode, vérifier si les dimensions ont changé est moins cher et vous pouvez donc envisager de combiner les deux.
Ou si vous modifiez directement le div (plutôt que le div soit modifié par l'entrée de l'utilisateur de manière imprévisible, comme s'il est contentEditable), vous pouvez simplement déclencher un événement personnalisé chaque fois que vous le faites.
Inconvénient: IE et Opera ne mettent pas en œuvre cet événement.
la source
Voici comment j'ai récemment géré ce problème:
Je sais que j'ai quelques années de retard à la fête, je pense juste que ma réponse peut aider certaines personnes à l'avenir, sans avoir à télécharger de plugins.
la source
Vous pouvez utiliser la
MutationObserver
classe.MutationObserver
fournit aux développeurs un moyen de réagir aux changements dans un DOM. Il est conçu pour remplacer les événements de mutation définis dans la spécification des événements DOM3.Exemple ( source )
la source
Il existe un plugin jQuery qui peut très bien gérer cela
http://www.jqui.net/jquery-projects/jquery-mutate-official/
voici une démonstration de celui-ci avec différents scénarios quant au changement de hauteur, si vous redimensionnez le div bordé de rouge.
http://www.jqui.net/demo/mutate/
la source
setTimeout
, donc ça prendrait 1ms + [temps qu'il faut pour faire les vérifications] en bref, mais l'idée était d'écouter constamment, une fois que vous l'avez fait, déclencher à nouveau, c'est comme une queue. Je suis sûr que je pourrais le faire beaucoup mieux mais pas beaucoup de temps.En réponse à user007:
Si la hauteur de votre élément change en raison d'éléments qui y sont ajoutés à l'aide de
.append()
vous ne devriez pas avoir besoin de détecter le changement de hauteur. Ajoutez simplement le repositionnement de votre deuxième élément dans la même fonction où vous ajoutez le nouveau contenu à votre premier élément.Un péché:
Exemple de travail
la source
Vous pouvez créer un setInterval simple.
ÉDITER:
Ceci est un exemple avec une classe. Mais vous pouvez faire quelque chose de plus simple.
la source
Vous pouvez l'utiliser, mais il ne prend en charge que Firefox et Chrome.
la source
Assez basique mais fonctionne:
la source