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 overflowparamètres de style, mais comment puis-je faire cela dans un navigateur croisé?
Modification supplémentaire
Pas seulement les overflowparamè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 offsetdimension peut être plus grande que la scrolldimension, mais l'élément peut toujours faire défiler. Nous devons en fait soustraire les bordures de la offsetdimension pour obtenir la fenêtre déroulante réelle de l'élément et la comparer à la scrolldimension.
Pour référence future
:scrollableLe 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:hiddenposé? 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.