84 votes

javascript : détecter la fin du scroll

J'ai un div couche avec overflow réglé sur scroll .

Lorsque vous faites défiler l'écran jusqu'au bas de la page div je veux exécuter une fonction.

2 votes

0 votes

La capture d'écran est cassée

139voto

Bjorn Tipling Points 16243

La réponse acceptée était fondamentalement erronée, elle a depuis été supprimée. La réponse correcte est :

function scrolled(e) {
  if (myDiv.offsetHeight + myDiv.scrollTop >= myDiv.scrollHeight) {
    scrolledToBottom(e);
  }
}

Testé dans Firefox, Chrome et Opera. Il fonctionne.

0 votes

Pouvez-vous nous dire pourquoi il est défectueux ?

7 votes

Parce qu'il ne détecte pas du tout la fin du défilement, il détecte quand la partie de la page qui a défilé vers le haut et la hauteur de la div qui la contient sont les mêmes ! Si vous avez deux fois plus de contenu à faire défiler que la hauteur de la division, une fois que vous avez atteint la toute fin, la valeur scrollTop sera deux fois plus grande que la hauteur offsetHeight du conteneur. La réponse acceptée vérifie si ces valeurs sont égales, et elle ne détectera pas la fin. Ma solution vérifie que la valeur scrollTop + la hauteur du conteneur est égale (ou supérieure, le cas échéant) à l'ensemble de la zone de défilement, ce qui constitue le fond !

5 votes

@Alex window.location.href = 'http://newurl.com'; ou window.open('http://newurl.com'); + le code ci-dessus.

7voto

just_user Points 1446

Je n'ai pu obtenir aucune des réponses ci-dessus, alors voici une troisième option qui fonctionne pour moi ! (Ceci est utilisé avec jQuery)

if (($(window).innerHeight() + $(window).scrollTop()) >= $("body").height()) {
    //do stuff
}

J'espère que cela vous aidera !

6voto

maxspan Points 310

OK. Voici une bonne et appropriée solution

Vous avez un appel Div avec un id="myDiv"

Ainsi va la fonction.

function GetScrollerEndPoint()
{
   var scrollHeight = $("#myDiv").prop('scrollHeight');
   var divHeight = $("#myDiv").height();
   var scrollerEndPoint = scrollHeight - divHeight;

   var divScrollerTop =  $("#myDiv").scrollTop();
   if(divScrollerTop === scrollerEndPoint)
   {
       //Your Code 
       //The Div scroller has reached the bottom
   }
}

1 votes

Cela a fonctionné pour moi, en testant dans Chrome avec le tableau

0 votes

Merci ! Cela fonctionne pour moi à la fois pour Firefox et Chrome :D

4voto

AlexQueue Points 1429

Cela a marché pour moi :

$(window).scroll(function() {
  buffer = 40 // # of pixels from bottom of scroll to fire your function. Can be 0
  if ($(".myDiv").prop('scrollHeight') - $(".myDiv").scrollTop() <= $(".myDiv").height() + buffer )   {
    doThing();
  }
});

Il faut utiliser jQuery 1.6 ou plus.

3voto

Chandler Zwolle Points 41

J'ai trouvé une alternative qui fonctionne.

Aucune de ces réponses n'a fonctionné pour moi (actuellement testé dans FireFox 22.0), et après beaucoup de recherches j'ai trouvé, ce qui semble être, une solution beaucoup plus propre et directe.

Solution mise en œuvre :

function IsScrollbarAtBottom() {
    var documentHeight = $(document).height();
    var scrollDifference = $(window).height() + $(window).scrollTop();
    return (documentHeight == scrollDifference);
}

Ressource : http://jquery.10927.n7.nabble.com/How-can-we-find-out-scrollbar-position-has-reached-at-the-bottom-in-js-td145336.html

Salutations

0 votes

C'est également la seule réponse qui a fonctionné pour moi, merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X