.scrollbox {
overflow: auto;
width: 200px;
max-height: 200px;
margin: 50px auto;
background:
/* Shadow covers */
linear-gradient(white 30%, rgba(255,255,255,0)),
linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,
/* Shadows */
radial-gradient(50% 0, farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)),
radial-gradient(50% 100%,farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%;
background:
/* Shadow covers */
linear-gradient(white 30%, rgba(255,255,255,0)),
linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,
/* Shadows */
radial-gradient(farthest-side at 50% 0, rgba(0,0,0,.2), rgba(0,0,0,0)),
radial-gradient(farthest-side at 50% 100%, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%;
background-repeat: no-repeat;
background-color: white;
background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;
/* Opera doesn't support this in the shorthand */
background-attachment: local, local, scroll, scroll;
}
<div class="scrollbox">
<ul>
<li>Not enough content to scroll</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
<div class="scrollbox">
<ul>
<li>Ah! Scroll below!</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>The end!</li>
<li>No shadow there.</li>
</ul>
</div>
L'élément peut être survolé verticalement, horizontalement ou les deux. Cette fonction vous renverra une valeur booléenne si l'élément DOM est survolé:
Afficher l'extrait de code
Exemple ES6:
la source
$("#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: événement de débordementLa comparaison
element.scrollHeight
avecelement.clientHeight
devrait faire la tâche.Vous trouverez ci-dessous les images de MDN expliquant Element.scrollHeight et Element.clientHeight.
la source
J'ai fait un codepen en plusieurs parties démontrant les réponses ci-dessus (par exemple en utilisant le débordement caché et la hauteur) mais aussi comment vous étendre / réduire les éléments débordés
Exemple 1: https://codepen.io/Kagerjay/pen/rraKLB (Véritable exemple simple, pas de javascript, juste pour couper les éléments débordés)
Exemple 2: https://codepen.io/Kagerjay/pen/LBErJL (gestionnaire d'événements unique show more / showless sur les éléments débordés)
Exemple 3: https://codepen.io/Kagerjay/pen/MBYBoJ (Gestionnaire multi-événements sur beaucoup afficher plus / afficher moins sur les éléments débordés)
J'ai également joint l'exemple 3 ci-dessous , j'utilise Jade / Pug, donc ça pourrait être un peu verbeux. Je suggère de vérifier les codepens que j'ai simplifiés à saisir.
la source
Quelque chose comme ceci: http://jsfiddle.net/Skooljester/jWRRA/1/ fonctionne? Il vérifie simplement la hauteur du contenu et la compare à la hauteur du conteneur. Si c'est plus grand que vous pouvez mettre dans le code pour ajouter un bouton "Afficher plus".
Mise à jour: Ajout du code pour créer un bouton «Afficher plus» en haut du conteneur.
la source
Si vous utilisez jQuery, vous pouvez essayer une astuce: créer un div externe avec
overflow: hidden
et un div interne avec du contenu. Ensuite, utilisez la.height()
fonction pour vérifier si la hauteur de la div interne est supérieure à la hauteur de la div externe. Je ne suis pas sûr que cela fonctionnera, mais essayez-le.la source
utilisez js pour vérifier si l'enfant
offsetHeight
est plus que les parents .. si c'est le cas, faites déborder les parentsscroll/hidden/auto
selon ce que vous voulez et aussidisplay:block
sur le plus de div ..la source
Vous pouvez vérifier les limites relatives au parent de décalage.
Si vous passez cet élément, il vous dira si ses limites sont entièrement à l'intérieur d'un conteneur, et sera par défaut le parent offset de l'élément si aucun conteneur explicite n'est fourni. Il utilise
la source
Un autre problème à prendre en compte est l'indisponibilité de JS. Pensez à l'enchantement progressif ou à la dégradation gracieuse. Je voudrais suggerer:
la source
Voici un violon pour déterminer si un élément a été débordé à l'aide d'un div wrapper avec débordement: hidden et JQuery height () pour mesurer la différence entre le wrapper et un div de contenu interne.
Source: Frameworks & Extensions sur jsfiddle.net
la source
C'est la solution jQuery qui a fonctionné pour moi.
clientWidth
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
Cela a fonctionné pour moi. Je vous remercie.
la source
L'alternative jquery à la réponse est d'utiliser la touche [0] pour accéder à l'élément brut tel que celui-ci:
la source
J'ai étendu Element pour des raisons d'encapsulation. De la réponse micnic.
Utilisez-le comme ça
la source