[removed] How to detect if browser window is scrolled to bottom?

后端 未结 19 981
你的背包
你的背包 2020-11-22 16:00

I need to detect if a user is scrolled to the bottom of a page. If they are at the bottom of the page, when I add new content to the bottom, I will automatically scroll them

相关标签:
19条回答
  • 2020-11-22 16:37

    Try this method if you've had no luck with the others.

    window.onscroll = function()
    {
        
        
        
        
         var difference = document.documentElement.scrollHeight - window.innerHeight;
         var scrollposition = document.documentElement.scrollTop;
         
         if (difference - scrollposition <= 2)
         {
         
                alert("Bottom of Page!"); 
            
         
         }
        
    
        
    }

    0 讨论(0)
  • 2020-11-22 16:39

    Surprisingly none of the solutions worked for me. I think it's because my css was messed up, and body didn't wrap around all of the content when using height: 100% (don't know why yet). However while looking for a solution I've came up with something well... basically the same, but maybe it's worth to look at - I'm new into programming so sorry if it's doing the same slower, is less supported or something like that...

    window.onscroll = function(evt) {
      var check = (Element.getBoundingClientRect().bottom - window.innerHeight <= 0) ? true : false;
      if (check) { console.log("You're at the bottom!"); }
    };
    
    0 讨论(0)
  • 2020-11-22 16:40

    Updated code for all major browsers support (include IE10 & IE11)

    window.onscroll = function(ev) {
        if ((window.innerHeight + window.pageYOffset) >= document.body.offsetHeight) {
            alert("you're at the bottom of the page");
        }
    };
    

    The problem with the current accepted answer is that window.scrollY is not available in IE.

    Here is a quote from mdn regarding scrollY:

    For cross-browser compatibility, use window.pageYOffset instead of window.scrollY.

    And a working snippet:

    window.onscroll = function(ev) {
        if ((window.innerHeight + window.pageYOffset ) >= document.body.offsetHeight) {
            alert("you're at the bottom of the page");
        }
    };
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>

    Note for mac

    Based on @Raphaël's comment, there was a problem in mac due to a small offset.
    The following updated condition works:

    (window.innerHeight + window.pageYOffset) >= document.body.offsetHeight - 2
    

    I didn't have the chance to test it further, if someone can comment about this specific issue it will be great.

    0 讨论(0)
  • 2020-11-22 16:40

    If you're setting height: 100% on some container <div id="wrapper">, then the following code works (tested in Chrome):

    var wrapper = document.getElementById('wrapper');
    
    wrapper.onscroll = function (evt) {
      if (wrapper.scrollTop + window.innerHeight >= wrapper.scrollHeight) {
        console.log('reached bottom!');
      }
    }
    
    0 讨论(0)
  • 2020-11-22 16:41

    Two solutions I found that worked for me:

      window.addEventListener('scroll', function(e) {
        if (
          window.innerHeight + document.documentElement.scrollTop ===
          document.documentElement.offsetHeight
        ) {
          console.log('You are at the bottom')
        }
      })
    

    And the other:

      window.addEventListener('scroll', function(e) {
        if (
          window.innerHeight + window.pageYOffset ===
          document.documentElement.offsetHeight
        ) {
          console.log('You are at the bottom')
        }
      })
    
    0 讨论(0)
  • 2020-11-22 16:42

    I've just started looking at this and the answers here helped me, so thanks for that. I've expanded a little so that the code is safe all the way back to IE7:

    Hope this proves useful for someone.

    Here, have a Fiddle ;)

        <!DOCTYPE html>
    <html>
    <head>
        <style>
            div {
                height: 100px;
                border-bottom: 1px solid #ffffd;
            }
    
            div:nth-child(even) {
                background: #CCC
            }
    
            div:nth-child(odd) {
                background: #FFF
            }
    
        </style>
    </head>
    
    <body>
    <div></div><div></div><div></div><div></div><div></div><div></div><div></div>
    <div></div><div></div><div></div><div></div><div></div><div></div><div></div>
    <div></div><div></div><div></div><div></div><div></div><div></div><div></div>
    <div></div><div></div><div></div><div></div><div></div><div></div><div></div>
    <div></div><div></div><div></div><div></div><div></div><div></div><div></div>
    </body>
    
    <script type="text/javascript">
    console.log("Doc Height = " + document.body.offsetHeight);
    console.log("win Height = " + document.documentElement.clientHeight);
    window.onscroll = function (ev) {
        var docHeight = document.body.offsetHeight;
        docHeight = docHeight == undefined ? window.document.documentElement.scrollHeight : docHeight;
    
        var winheight = window.innerHeight;
        winheight = winheight == undefined ? document.documentElement.clientHeight : winheight;
    
        var scrollpoint = window.scrollY;
        scrollpoint = scrollpoint == undefined ? window.document.documentElement.scrollTop : scrollpoint;
    
        if ((scrollpoint + winheight) >= docHeight) {
            alert("you're at the bottom");
        }
    };
    </script>
    </html>
    
    0 讨论(0)
提交回复
热议问题