4

我无法将 jQuery 的 .animate 方法与 Google 的 Material Design Lite(MDL) 一起使用。我使用 MDL 制作导航栏,但无法平滑滚动。

简单的 jQuery 代码是这样的:

$(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.offset().top;
                $("html, body").animate({scrollTop:position}, speed, "swing");
                console.log("SMOOTH END");
            });
        });

简单的html代码是这样的:

<!-- Navigation (this is included header) -->
<nav class="mdl-navigation">
    <a class="mdl-navigation__link" href="">Home</a>
    <a class="mdl-navigation__link smooth" href="#product">Product</a>
</nav>

<!--Main contents -->
<main class="mdl-layout__content">
    <div id="product"><!—-Contents-—&gt;</div>
</main>

这段代码向我展示了日志“SMOOTH BEGIN”和“SMOOTH END”。但是,该链接作为普通链接工作,不像平滑。如何让 jQuery 与 MDL 一起工作?也许正在发生一些冲突,但控制台没有显示任何内容。

4

2 回答 2

13

您没有看到任何事情发生的原因是您在 body 节点上滚动。MDL 处理mdl-layout__content中的溢出,这是您应该滚动的元素。

所以这 -

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

现在变成——

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

这是一个 codepen 示例 - http://codepen.io/mdlhut/pen/BNeoVa

于 2015-08-16T16:44:57.053 回答
0

Mitsuhiko Shimomura 帮助我解决了另一个堆栈溢出问题。而不是 var position = target.offset().top; 我使用var position = target.get( 0 ).offsetTop - 130;如果不是滚动会转到顶部并甩掉位置,它看起来不太好。我不得不添加- 130到, .offsetTop因为平滑滚动超出了我在 html 中的目标 ID。感谢您的帮助!请参阅我使用此平滑滚动功能的应用程序。

并记住像这样在 html 中的锚点中添加平滑类

<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");
  });
});
于 2016-06-03T17:24:02.463 回答