Material Design Lite and jQuery, smooth scroll not working

后端 未结 2 968
余生分开走
余生分开走 2020-12-16 07:43

I am unable to use .animate method of jQuery with Google\'s Material Design Lite(MDL). I have used MDL to make navigation bar, but smooth scrolling was not working.

相关标签:
2条回答
  • 2020-12-16 08:08

    The reason you are not seeing anything happen is because you are scrolling on the body node. MDL handles the overflow within the mdl-layout__content, this is the element you should scroll on.

    So this -

    $("html, body").animate({scrollTop:position}, speed, "swing");
    

    Now becomes-

    $(".mdl-layout__content").animate({scrollTop:position}, speed, "swing");
    

    Here's a codepen example - http://codepen.io/mdlhut/pen/BNeoVa

    0 讨论(0)
  • 2020-12-16 08:20

    Mitsuhiko Shimomura helped me in a different stack-overflow question. Instead of var position = target.offset().top; I used var position = target.get( 0 ).offsetTop - 130; if not the scroll would go to top and throw off the position, it did not look good. I had to add - 130 to the .offsetTop because the smooth scroll was going past my target id's in the html. Thank you for the help! See my app where I used this smoothscroll feature.

    And remember to add smooth class to anchors in html like this

    <a class="smooth" href="#scrollToId">Target</a> 
    <div id="scrollToId">Target</div>
    
    $(function(){
      $('a.smooth').click(function(){
        console.log("SMOOTH BEGIN");
        var speed = 1000;
        var href= $(this).attr("href");
        var target = $(href == "#" || href == "" ? 'html' : href);
        var position = target.get( 0 ).offsetTop - 130;
        $(".mdl-layout__content").animate({scrollTop:position}, speed, "swing");
        console.log("SMOOTH END");
      });
    });
    
    0 讨论(0)
提交回复
热议问题