J'ai un div avec une hauteur fixe et overflow:hidden;
Je veux vérifier avec jQuery si le div a des éléments qui débordent au-delà de la hauteur fixe du div. Comment puis-je faire ceci?
javascript
jquery
html
Justin Meltzer
la source
la source
Réponses:
En fait, vous n'avez pas besoin de jQuery pour vérifier s'il y a un débordement ou non. En utilisant
element.offsetHeight
,element.offsetWidth
,element.scrollHeight
etelement.scrollWidth
vous pouvez déterminer si ont un contenu plus grand que la taille de ce votre élément:Voir l'exemple en action: Fiddle
Mais si vous voulez savoir quel élément à l'intérieur de votre élément est visible ou non, vous devez faire plus de calcul. Il existe trois états pour un élément enfant en termes de visibilité:
Si vous voulez compter les éléments semi-visibles, ce serait le script dont vous avez besoin:
Et si vous ne voulez pas compter semi-visible, vous pouvez calculer avec une petite différence.
la source
<p>
est un élément de niveau bloc et prend 100% de largeur. Si vous voulez essayer cela avec une quantité de texte à l'intérieur du p, faites simplementp{display:inline}
. De cette façon, le texte à l'intérieur détermine la largeur dep
.J'avais la même question que l'OP, et aucune de ces réponses ne correspondait à mes besoins. J'avais besoin d'une condition simple, pour un simple besoin.
Voici ma réponse:
En outre, vous pouvez changer
scrollWidth
descrollHeight
si vous avez besoin de tester l' une ou l' autre cas.la source
J'ai donc utilisé la bibliothèque jquery débordante: https://github.com/kevinmarx/overflowing
Après avoir installé la bibliothèque, si vous souhaitez affecter la classe
overflowing
à tous les éléments débordants, vous exécutez simplement:Cela donnera alors la classe
overflowing
, comme<div class="targetElement overflowing">
pour tous les éléments qui débordent. Vous pouvez ensuite l'ajouter à un gestionnaire d'événements (clic, survol de la souris) ou à une autre fonction qui exécutera le code ci-dessus afin qu'il se mette à jour dynamiquement.la source
Partiellement basé sur la réponse de Mohsen (la première condition ajoutée couvre le cas où l'enfant est caché devant le parent):
Alors faites simplement:
la source
Une méthode consiste à vérifier scrollTop par rapport à lui-même. Donnez au contenu une valeur de défilement plus grande que sa taille, puis vérifiez si son scrollTop est 0 ou non (s'il n'est pas 0, il a un débordement).
http://jsfiddle.net/ukvBf/
la source
En anglais simple: obtenez l'élément parent. Vérifiez sa hauteur et enregistrez cette valeur. Ensuite, parcourez tous les éléments enfants et vérifiez leurs hauteurs individuelles.
C'est sale, mais vous pourriez avoir l'idée de base: http://jsfiddle.net/VgDgz/
la source
Voici une solution jQuery pure, mais elle est plutôt compliquée:
la source
C'est la solution jQuery qui a fonctionné pour moi.
offsetWidth
etc. n'a pas fonctionné.Si cela ne fonctionne pas, assurez-vous que le parent des éléments a la largeur souhaitée (personnellement, j'ai dû utiliser
parent().parent())
.position
Est relatif au parent. J'ai également inclusextra_width
parce que mes éléments ("balises") contiennent des images qui prennent peu de temps à charge, mais pendant l'appel de fonction, ils ont une largeur nulle, ce qui gâche le calcul. Pour contourner cela, j'utilise le code d'appel suivant:J'espère que cela t'aides.
la source
J'ai corrigé cela en ajoutant un autre div dans celui qui déborde. Ensuite, vous comparez les hauteurs des 2 divs.
et le js
Cela semble plus facile ...
la source