Est-il possible de vérifier le overflow:auto
d'un div?
Par exemple:
HTML
<div id="my_div" style="width: 100px; height:100px; overflow:auto;" class="my_class">
* content
</div>
JQUERY
$('.my_class').live('hover', function (event)
{
if (event.type == 'mouseenter')
{
if( ... if scrollbar visible ? ... )
{
alert('true'):
}
else
{
alert('false'):
}
}
});
Parfois, le contenu est court (pas de barre de défilement) et parfois long (barre de défilement visible).
> this.innerHeight();
jsfiddle.net/p3FFL/210Peut-être une solution plus simple.
la source
.ready()
Vous pouvez le faire en utilisant une combinaison des attributs
Element.scrollHeight
etElement.clientHeight
.Selon MDN:
Et:
Par conséquent, l'élément affichera une barre de défilement si la hauteur de défilement est supérieure à la hauteur du client, donc la réponse à votre question est:
la source
Je devrais changer un peu ce que Reigel a dit:
innerHeight compte la hauteur du contrôle et ses rembourrages supérieur et inférieur
la source
Cela élargit la réponse de @ Reigel. Il renverra une réponse pour les barres de défilement horizontales ou verticales.
Exemple:
la source
Vous avez besoin de element.scrollHeight . Comparez-le avec
$(element).height()
.la source
J'ai fait un nouveau sélecteur personnalisé: pseudo pour jQuery pour tester si un élément a l'une des propriétés css suivantes:
Je voulais trouver le parent déroulant le plus proche d'un autre élément, j'ai donc également écrit un autre petit plugin jQuery pour trouver le parent le plus proche avec débordement.
Cette solution ne fonctionne probablement pas le mieux, mais elle semble fonctionner. Je l'ai utilisé conjointement avec le plugin $ .scrollTo. Parfois, j'ai besoin de savoir si un élément se trouve dans un autre conteneur déroulant. Dans ce cas, je veux faire défiler l'élément déroulant parent par rapport à la fenêtre.
J'aurais probablement dû emballer cela dans un seul plugin et ajouter le sélecteur psuedo en tant que partie du plugin, ainsi qu'exposer une méthode `` la plus proche '' pour trouver le conteneur déroulant (parent) le plus proche.
Anywho .... le voici.
Plugin jQuery $ .isScrollable:
$ (': scrollable') pseudo sélecteur jQuery:
$ .scrollableparent () Plugin jQuery:
La mise en œuvre est assez simple
MISE À JOUR: J'ai trouvé que Robert Koritnik avait déjà proposé un pseudo-sélecteur beaucoup plus puissant: un pseudo sélecteur défilable qui identifiera les axes de défilement et la hauteur des conteneurs défilables, dans le cadre de son plugin jQuery $ .scrollintoview (). plugin scrollintoview
Voici son pseudo sélecteur de fantaisie (accessoires):
la source
La première solution ci-dessus ne fonctionne que dans IE La deuxième solution ci-dessus ne fonctionne que dans FF
Cette combinaison des deux fonctions fonctionne dans les deux navigateurs:
HTH
la source
(scrollWidth / Height - clientWidth / Height) est un bon indicateur de la présence d'une barre de défilement, mais il vous donnera une réponse "faux positif" à plusieurs reprises. si vous avez besoin d'être précis, je suggère d'utiliser la fonction suivante. au lieu d'essayer de deviner si l'élément peut défiler - vous pouvez le faire défiler ...
la source
Les réponses de tout le monde ici sont incomplètes, et permet déjà d'arrêter d'utiliser jquery dans les réponses SO. Consultez la documentation de jquery si vous voulez des informations sur jquery.
Voici une fonction javascript pur généralisée pour tester si un élément a ou non des barres de défilement de manière complète:
la source
Je vais m'étendre encore plus sur ces pauvres âmes qui, comme moi, utilisent l'un des frameworks js modernes et non JQuery et ont été complètement abandonnées par les gens de ce fil:
cela a été écrit dans Angular 6 mais si vous écrivez React 16, Vue 2, Polymer, Ionic, React-Native, vous saurez quoi faire pour l'adapter. Et c'est tout le composant, donc ça devrait être facile.
dans le html, il y aurait un div avec la classe "elem-list" qui est stylisé dans le css ou le scss pour avoir un
height
et uneoverflow
valeur qui ne l'est pashidden
. (alorsauto
ousroll
)Je déclenche cet eval sur un événement de défilement parce que mon objectif final était d'avoir des "défilages de mise au point automatique" qui décident s'ils font défiler l'ensemble des composants horizontalement si lesdits composants n'ont pas de défilement vertical disponible et sinon ne font défiler que les entrailles de l'un des verticalement.
mais vous pouvez placer l'eval ailleurs pour qu'il soit déclenché par autre chose.
la chose importante à retenir ici, c'est que vous n'êtes jamais forcé à utiliser JQuery, il y a toujours un moyen d'accéder aux mêmes fonctionnalités qu'il a sans l'utiliser.
la source
this
conserve la portée parent;th = this;
est inutile.function(){}.bind(this)
Voici une version améliorée de la réponse d'Evan qui semble prendre correctement en compte la logique de débordement.
la source
Les solutions fournies ci-dessus fonctionneront dans la plupart des cas, mais la vérification de scrollHeight et du débordement n'est parfois pas suffisante et peut échouer pour les éléments body et html comme indiqué ici: https://codepen.io/anon/pen/EvzXZw
1. Solution - Vérifiez si l'élément peut défiler:
Remarque: les éléments avec
overflow: hidden
sont également traités comme défilants ( plus d'informations ), vous pouvez donc également ajouter une condition contre cela si nécessaire:Pour autant que je sache, cette méthode échoue uniquement si l'élément a
scroll-behavior: smooth
.Explication: L'astuce est que la tentative de défilement vers le bas et de retour ne sera pas rendue par le navigateur. La fonction la plus haute peut également être écrite comme suit:
Afficher l'extrait de code
2. Solution - Faites toutes les vérifications nécessaires:
la source
Voici mon amélioration: ajout de parseInt. pour une raison étrange, cela ne fonctionnait pas sans lui.
la source
Fonctionne sur Chrome , Edge , Firefox et Opera , au moins dans les versions les plus récentes.
Utilisation de JQuery ...
Configurez cette fonction pour corriger le pied de page:
Il renvoie une fonction. Fabriqué de cette façon juste pour régler le corps et le pied de page une fois.
Et puis, définissez-le lorsque le document est prêt.
Ajoutez ceci à votre footer css:
la source
La plupart des réponses présentées m'ont rapproché de l'endroit où je devais être, mais pas tout à fait là.
Nous voulions essentiellement évaluer si les barres de défilement - seraient - visibles dans une situation normale, par cette définition signifiant que la taille de l'élément de corps est plus grande que le port de vue. Ce n'était pas une solution présentée, c'est pourquoi je la soumets.
Espérons que cela aide quelqu'un!
Essentiellement, nous avons la
hasScrollbar
fonction, mais en retournant si l'élément demandé est plus grand que le port de vue. Pour voir la taille du port, nous venons de l'utiliser$(window).height()
. Une comparaison rapide de cela par rapport à la taille de l'élément, donne les résultats corrects et le comportement souhaitable.la source
Trouvez un parent de l'élément actuel qui a un défilement vertical ou un corps.
Il peut être utilisé pour faire défiler automatiquement vers l'élément actuel via:
la source
Une approche JavaScript sans cadre, vérifie à la fois verticale et horizontale
Utilisez-le comme ça
la source