jQuery scrollTop() method not working

前端 未结 4 2560
花落未央
花落未央 2021-02-19 19:53

I have the following jQuery code

$(document).ready(function () {
    $(\'.navtoTop\').click(function(){
           $(\"html\").scrollTop( $(\"#topofthePage\").of         


        
相关标签:
4条回答
  • 2021-02-19 20:15

    You already got an answer on this. But, since you also want a smooth scrolling, consider the following alternative:

    $('.navtoTop').click(function(){
        $('html, body').animate({
            scrollTop: $('#topofthePage').offset().top
        }, 1000);
    }); 
    
    0 讨论(0)
  • Better way to use:

    $(document).ready(function () {
        $('.navtoTop').click(function(){
              $(window).scrollTop()
              $("window").scrollTop( $("#topofthePage").offset().top );
        }); 
    });
    
    0 讨论(0)
  • 2021-02-19 20:34

    A common scrollTo issue is having overflow set on the "html, body" element in css. Rarely mentioned when having scrolling/animating issues on html/body elements and can end up in excessive over-engineering.

    If overflow needs to be set, put it on the body element only. Not both html,body.

    It is also a good habit to use a data-* attribute in place of classes or IDs in your html. This gets you in the habit of separating styles from code. Consider this to make your life easier in the future:

    Create Reusable Scroll Function

    scrollioreceiver = function(sender) {
    
      $(sender).on({
        click: sentFrom
      });
    
      function sentFrom(){
        var dataMine = $(this).attr('data-sender'),
            dataSend = $('[data-receiver="'+dataMine+'"]');
    
        $('html, body').animate({
            scrollTop: $(dataSend).offset().top - 70
        }, 800, function() {
            // if you need a callback function
        });
      }
    }
    

    Create data attributes to html elements (data-name is arbitrary and should make sense):

    ADD HTML LINK

    <a data-sender="ScrollToMatch">Link To Click To Scroll To Match Attribute</a> 
    

    ADD HTML ELEMENT

    <div data-receiver="ScrollToMatch">Scrolls To This Element</div>
    

    VERIFY CSS » overflow added to "html,body" won't work

    body { overflow-x: hidden; }
    

    INIT FUNCTION ON READY » initialize on doc ready with attribute name selector to create flexibility on multiple calls

    scrollioreceiver('[data-sender]');
    

    Hope this helps!

    0 讨论(0)
  • You have to use window instead of html:

    $(window).scrollTop( $("#topofthePage").offset().top );
    

    Note that window should not be enclosed in quotes as i'ts an object and not a tag.

    0 讨论(0)
提交回复
热议问题