Quel est le moyen le plus rapide de vérifier si un élément possède des barres de défilement?
Une chose bien sûr est de vérifier si l'élément est plus grand que sa fenêtre, ce qui peut facilement être fait en vérifiant ces deux valeurs:
el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth
mais cela ne veut pas dire qu'il a aussi des barres de défilement (donc il peut être fait défiler par les humains).
Question
Comment puis-je vérifier les barres de défilement dans un 1 navigateur croix et 2 javascript seulement (comme dans aucune jQuery ) façon?
Javascript uniquement, car j'ai besoin de la plus petite surcharge possible, car j'aimerais écrire un filtre de sélection jQuery très rapide
// check for specific scrollbars
$(":scrollable(x/y/both)")
// check for ANY scrollbar
$(":scrollable")
Je suppose que je devrais vérifier les overflow
paramètres de style, mais comment puis-je faire cela dans un navigateur croisé?
Modification supplémentaire
Pas seulement les overflow
paramètres de style. Vérifier si un élément a une barre de défilement n'est pas aussi simple qu'il n'y paraît. La première formule que j'ai écrite ci-dessus fonctionne bien lorsque l'élément n'a pas de bordure, mais quand c'est le cas (en particulier lorsque la bordure a une largeur considérable), la offset
dimension peut être plus grande que la scroll
dimension, mais l'élément peut toujours faire défiler. Nous devons en fait soustraire les bordures de la offset
dimension pour obtenir la fenêtre déroulante réelle de l'élément et la comparer à la scroll
dimension.
Pour référence future
:scrollable
Le filtre de sélection jQuery est inclus dans mon .scrollintoview()
plugin jQuery. Le code complet peut être trouvé dans mon article de blog si quelqu'un en a besoin. Même s'il n'a pas fourni la solution réelle, le code de Soumya m'a considérablement aidé à résoudre le problème. Cela m'a orienté dans la bonne direction.
overflow:hidden
posé? Il y aurait un excès de contenu, mais ce n'est toujours pas défilable. Le problème n'est de loin pas aussi simple qu'il y paraît.