2009-05-18 6 views
41

Comment puis-je déterminer, sans utiliser jQuery ou une autre bibliothèque JavaScript, si une div avec une barre de défilement verticale est déplacée tout en bas?Comment puis-je déterminer si un div est placé en bas?

Ma question n'est pas de savoir comment faire défiler vers le bas. Je sais comment faire ca. Je veux déterminer si le div est déjà en bas.

Cela ne fonctionne pas:

if (objDiv.scrollTop == objDiv.scrollHeight) 
+0

juste deviner ici si (objDiv.scrollTop> objDiv.scrollHeight) et peut être nécessaire de réduire de scrollHeight la taille de la flèche de défilement (par exemple 20px) –

+0

certains documents: https: //developer.mozilla .org/fr-fr/docs/Web/API/Element/clientHeight ... ... ... https://developer.mozilla.org/fr-fr/docs/Web/API/HTMLElement/offsetHeight ... ... ... http://api.jquery.com/height/ ... ... ... http://api.jquery.com/innerheight/ ... ... ... http: //api.jquery.com/outerheight/ –

Répondre

58

Vous êtes assez proche en utilisant scrollTop == scrollHeight.

scrollTop fait référence au haut de la position de défilement, qui sera scrollHeight - offsetHeight

Votre instruction if devrait ressembler si (ne pas oublier d'utiliser égaux triple):

if(obj.scrollTop === (obj.scrollHeight - obj.offsetHeight)) 
{ 
} 

Edit: Correction ma réponse, était complètement faux

+4

Cela fonctionne presque, scrollHeight-offsetHeight n'est pas exactement la même valeur que scrollTop, mais après avoir essayé votre code, si j'ai besoin si cette différence est inférieure à 5 pixels pour que ce soit le bas, je reçois le comportement vouloir. –

+0

ce n'est pas exact. obj.borderWidth doit être considéré – looping

+2

Je préfère cette réponse: http://stackoverflow.com/questions/5828275/how-can-i-use-jquery-to-check-if-a-div-is-scrolled-all -the-way-the-bottom – Chris

6

Renvoie vrai si un élément est à la fin de son défilement, faux s'il ne l'est pas.

element.scrollHeight - element.scrollTop === element.clientHeight 

Mozilla Developer Network

+1

Pour moi, en utilisant Chrome, où l'élément est document.body, cela ne fonctionne pas. 'document.body.scrollHeight' et' document.bodyclientHeight' ont la même valeur et donc l'expression n'est jamais vraie. –

+0

Quelle modification pouvons-nous faire pour que nous puissions détecter, que le défilement est proche du fond. Par exemple, si le défilement est inférieur à 75%, considérez-le près du bas – iamsaksham

3

Afin d'obtenir des résultats corrects lors de la prise en compte des choses telles que la possibilité d'une frontière, le nombre barre de défilement horizontale et/ou pixel flottant, vous devez utiliser ...

el.scrollHeight - el.scrollTop - el.clientHeight < 1 

REMARQUE: vous devez utiliser clientHeight au lieu de offsetHeight si vous voulez obtenir des résultats corrects. offsetHeight vous donnera des résultats corrects que si el n'a pas de frontière ou barre de défilement horizontale

1

peu tard pour ce parti, mais aucune des réponses ci-dessus semblent fonctionner particulièrement bien quand ...

  • Affichage mise à l'échelle est appliquée au système d'exploitation pour UHD affiche
  • Mise à l'échelle/zoom est appliqué au navigateur

pour tenir compte de toutes les éventualités, vous devrez arrondir la position de défilement calculée:

Math.ceil(element.scrollHeight - element.scrollTop) === element.clientHeight