Quel est le moyen le plus rapide de vérifier si un élément a des barres de défilement?
Une chose de sûr est de vérifier si l'élément est plus grande que la fenêtre d'affichage, 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 de barres de défilement (de sorte qu'il peut réellement faire défiler par les humains).
Question
Comment puis-je vérifier pour les barres de défilement dans une 1 la croix-navigateur et 2 javascript seulement (comme dans pas de jQuery)?
Javascript seulement, parce que j'ai besoin aussi léger que possible, parce que j'avais envie d'écrire un très rapide sélecteur jQuery filtre
// check for specific scrollbars
$(":scrollable(x/y/both)")
// check for ANY scrollbar
$(":scrollable")
Je suppose que je devrais vérifier pour overflow
paramètres de style, mais comment dois-je faire dans un navigateur croix de chemin?
Édition supplémentaire
Non seulement overflow
paramètres de style. Pour vérifier si un élément a une barre de défilement n'est pas aussi anodin qu'il y paraît. La première formule que j'ai écrit ci-dessus fonctionne très bien lorsque l'élément n'est pas une frontière, mais quand il le fait (surtout quand la frontière est de grande largeur), offset
dimension peut être plus grand que scroll
dimension, mais l'élément peut toujours être déplacé. Nous avons à soustraire des frontières de l' offset
dimension d'obtenir le véritable fenêtre d'affichage avec défilement de l'élément et de les comparer à scroll
dimension.
Pour référence future
:scrollable
jQuery sélecteur de filtre est inclus dans mon .scrollintoview()
plugin jQuery. Code complet peut être trouvé dans mon blog , si quelqu'un en a besoin. Même si elle n'était pas fournir la solution réelle Soumya du code considérablement m'a aidé à résoudre le problème. Il m'a orienté dans la bonne direction.