Vérifier si un élément de contenu est-il dépassé?
Quelle est la meilleure façon de détecter si un élément a été débordé?
Mon cas d'utilisation, je veux limiter un certain contenu de la boîte pour avoir une hauteur de 300px. Si le contenu interne est plus grand que cela, je le couper avec un dépassement de capacité. Mais s'il est débordé, je veux montrer un bouton "plus", mais sinon, je ne veux pas afficher le bouton.
Est-il un moyen facile de détecter un dépassement de capacité ou est-il une meilleure méthode?
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez afficher uniquement un identifiant pour plus de contenu, alors vous pouvez le faire avec de la pure CSS. J'utilise pur défilement des ombres pour cela. Le truc, c'est l'utilisation de
background-attachment: local;
. Votre css ressemble à ceci:CSS:
HTML:
Le code et l'exemple que vous pouvez trouver sur http://dabblet.com/gist/2462915
Et une explication vous pouvez trouver ici: http://lea.verou.me/2012/04/background-attachment-local/.
L'élément peut être survolé verticalement, horizontalement ou les deux. Cette fonction va vous renvoyer une valeur booléenne si l'élément du DOM est survolé:
ES6 exemple:
$("#element").overflown()
):$.fn.overflown=function(){var e=this[0];return e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth;}
element.addEventListener ("overflow", () => log( "overflow" ), false);
Référence: overflow événementComparant élément
.scrollHeight
à élément.clientHeight
devrait faire la tâche.Ci-dessous sont les images de MDN expliquant Élément.scrollHeight et l'Élément.clientHeight.
J'ai fait un multipart codepen démontrant les réponses ci-dessus ( par ex. à l'aide de dépassement de caché et de la hauteur), mais aussi comment vous pourriez développer /réduire débordé éléments
Exemple 1: https://codepen.io/Kagerjay/pen/rraKLB ( Real simple exemple, pas de javascript, juste pour le clip débordé éléments)
Exemple 2: https://codepen.io/Kagerjay/pen/LBErJL (un Seul gestionnaire d'événement afficher plus /showless sur débordé éléments)
Exemple 3: https://codepen.io/Kagerjay/pen/MBYBoJ (Multi gestionnaire d'événement sur de nombreux montrer plus montrer moins sur débordé éléments)
J'ai attaché à l'exemple 3 ci-dessous ainsi, j'utilise Jade/Carlin, de sorte qu'il pourrait être un peu verbeux. Je suggère de vérifier la codepens j'ai fait sa plus simple à saisir.
JS:
CSS:
HTML:
Serait quelque chose comme cela: http://jsfiddle.net/Skooljester/jWRRA/1/ travail? Il vérifie juste la hauteur du contenu et la compare à la hauteur du conteneur. Si il est plus grand que vous pouvez mettre dans le code pour ajouter un "plus" sur le bouton.
Mise à jour: Ajouté le code pour créer un "Plus" situé en haut du conteneur.
Si vous utilisez jQuery, vous pouvez essayer un truc: faire des div extérieure avec
overflow: hidden
et l'intérieur de la div avec le contenu. Ensuite, utilisez.height()
fonction pour vérifier si la hauteur de l'intérieur de la div est plus grande que la hauteur de la div extérieure. Je ne suis pas sûr que cela fonctionne, mais lui donner un essai.utiliser js pour vérifier si l'enfant
offsetHeight
est plus que les parents.. si c'est le cas,prenez les parents de débordementscroll/hidden/auto
selon ce que vous voulez et aussidisplay:block
sur les plus div..Une autre question que vous devriez considérer est un JS indisponibilité. Pensez progressive de l'enchantement ou de la dégradation gracieuse. Je dirais:
Ici est un violon pour déterminer si un élément a été débordé à l'aide d'une enveloppe de div avec overflow:hidden et JQuery hauteur() pour mesurer la différence entre l'enveloppe et l'intérieur du contenu de la div.
Source: Cadres & Extensions sur jsfiddle.net
C'est le jQuery solution qui a fonctionné pour moi.
clientWidth
etc. n'a pas fonctionné.Si cela ne fonctionne pas, s'assurer que les éléments de parent a la largeur désirée (personnellement, j'ai eu à utiliser
parent().parent())
.position
est par rapport à la mère. J'ai aussi inclusextra_width
parce que mes éléments ("tags") contiennent des images qui prennent peu de temps à charger, mais lors de l'appel de la fonction qu'ils ont une largeur égale à zéro, gâchant le calcul. Pour contourner cela, j'utilise la suite de l'appel de code:Espère que cette aide.
Vous pouvez vérifier les limites par rapport à l'offset parent.
Si vous passez ce un élément qu'il vous dira si ses limites sont entièrement à l'intérieur d'un conteneur, et sera, par défaut, l'élément le décalage d'un parent si aucune condition explicite de conteneur est fourni. Il utilise
Cela a fonctionné pour moi. Merci.
Le jquery alternative la réponse est d'utiliser la touche [0] pour accéder à la crue de l'élément comme ceci: