Je veux juste un simple JQ / JS pour vérifier si la page / fenêtre actuelle (pas un élément particulier) a une barre de défilement verticale.
Googler me donne des choses qui semblent trop complexes pour cette fonctionnalité de base.
Comment cela peut-il être fait?
javascript
jquery
scroll
Boisé
la source
la source
overflow
propriété debody
est définie surhidden
quelque part le long de la ligne, cela ne fonctionnera pas. La mise cachée sur un corps est cependant extrêmement rare.$(document)
place de$("body")
, cela a fonctionné pour moi quand le corps ne l'a pas fait (j'ai un conteneur absolu avec un rapport hauteur / largeur sur la largeur / hauteur)essaye ça:
Cela vous dira seulement si la hauteur de défilement verticale est plus grande que la hauteur du contenu visible, cependant. La
hasVScroll
variable contiendra vrai ou faux.Si vous devez effectuer une vérification plus approfondie, ajoutez ce qui suit au code ci-dessus:
la source
cStyle.overflow === 'scroll'
?cStyle.overflow == "visible"
peut afficher des barres de défilement lorsque l'élément est ledocument.body
. Mais il devrait l'être (hasVScroll && cStyle.overflow == "visible" && element.nodeName == "BODY"). De plus, il doit vérifiercStyle.overflow === 'scroll'
que vous le signalez.J'ai essayé la réponse précédente et ne semble pas fonctionner le $ ("body"). Height () ne représente pas nécessairement toute la hauteur html.
J'ai corrigé la solution comme suit:
la source
Ramenons cette question d'entre les morts;) Il y a une raison pour laquelle Google ne vous donne pas de solution simple. Les cas particuliers et les bizarreries du navigateur affectent le calcul, et ce n'est pas aussi trivial qu'il y paraît.
Malheureusement, il y a des problèmes avec les solutions décrites ici jusqu'à présent. Je ne veux pas du tout les dénigrer - ce sont d'excellents points de départ et touchent toutes les propriétés clés nécessaires pour une approche plus robuste. Mais je ne recommanderais pas de copier et coller le code de l'une des autres réponses car
$( document ).width()
et.height()
sont la proie de la détection boguée de jQuery de la taille du document .window.innerWidth
, si le navigateur le prend en charge, empêche votre code de détecter les barres de défilement dans les navigateurs mobiles, où la largeur de la barre de défilement est généralement de 0. Elles sont simplement affichées temporairement en superposition et ne prennent pas de place dans le document . Le zoom sur mobile devient également un problème de cette façon (longue histoire).html
etbody
sur des valeurs non par défaut (ce qui se passe alors est un peu compliqué - voir cette description ).J'ai passé plus de temps que je ne l'aurais imaginé à trouver une solution qui "fonctionne juste" (toux). L'algorithme que j'ai mis au point fait maintenant partie d'un plugin, jQuery.isInView , qui expose une
.hasScrollbar
méthode . Jetez un œil à la source si vous le souhaitez.Dans un scénario où vous avez le contrôle total de la page et que vous n'avez pas à gérer de CSS inconnu, l'utilisation d'un plugin peut être exagérée - après tout, vous savez quels cas limites s'appliquent et lesquels ne le sont pas. Cependant, si vous avez besoin de résultats fiables dans un environnement inconnu, je ne pense pas que les solutions décrites ici suffiront. Vous feriez mieux d'utiliser un plugin bien testé - le mien ou n'importe qui d'autre.
la source
window.scrollbars
objet qui a une seule propriété,visible
. Cela semble prometteur mais ne l'est pas. Il n'est pas pris en charge dans IE, y compris IE11. Et cela vous indique simplement qu'il y a une barre de défilement - mais pas laquelle. Voir la page de test ici .Celui-ci a fonctionné pour moi:
Pour le corps, il suffit d'utiliser
hasVerticalScroll()
.la source
clientHeight
est préférableoffsetHeight
ici. Sinon, vous pouvez avoir une bordure épaisse, et retourner il n'y a pas de barre de défilement quand il y en a.la source
Curieusement, aucune de ces solutions ne vous indique si une page a une barre de défilement verticale.
window.innerWidth - document.body.clientWidth
vous donnera la largeur de la barre de défilement. Cela devrait fonctionner dans tout ce qui concerne IE9 + (non testé dans les navigateurs inférieurs). (Ou pour répondre strictement à la question,!!(window.innerWidth - document.body.clientWidth)
Pourquoi? Disons que vous avez une page où le contenu est plus haut que la hauteur de la fenêtre et que l'utilisateur peut faire défiler vers le haut / bas. Si vous utilisez Chrome sur un Mac sans souris branchée, l'utilisateur ne verra pas de barre de défilement. Branchez une souris et une barre de défilement apparaîtra. (Notez que ce comportement peut être remplacé, mais c'est l'AFAIK par défaut).
la source
J'ai trouvé la solution de vanille
la source
window.innerWidth > document.documentElement.clientWidth
c'est vrai, maiswindow.innerHeight > document.documentElement.clientHeight
ne l'est pas. Il semble que ce soit l'inverse dans ce cas. Je ne suis pas un développeur JS, j'en ai juste besoin pour les tests Selenium. Je suis reconnaissant pour les indices.Celui-ci vous dira si vous avez une barre de défilement ou non. J'ai inclus des informations qui peuvent aider au débogage, qui s'afficheront sous forme d'alerte JavaScript.
Mettez ceci dans une balise de script, après la balise de fermeture du corps.
la source
J'ai écrit une version mise à jour de la réponse de Kees C. Bakker:
La fonction renvoie vrai ou faux selon que la page a une barre de défilement verticale ou non.
Par exemple:
la source
j'utilise
la source
Comparez simplement la largeur de l'élément racine des documents (c'est-à-dire l'élément html) à la partie intérieure de la fenêtre:
Si vous avez également besoin de connaître la largeur de la barre de défilement:
la source
D'autres solutions n'ont pas fonctionné dans l'un de mes projets et j'ai fini par vérifier la propriété css de débordement
mais cela ne fonctionnera que si la barre de défilement apparaît disparaître en changeant l'accessoire, cela ne fonctionnera pas si le contenu est égal ou inférieur à la fenêtre.
la source