添加平滑滚动到bootstrap 4.1(使用scrollspy时)?

时间:2018-05-02 11:30:25

标签: javascript jquery css twitter-bootstrap bootstrap-4

所以我在这里尝试做的是在导航栏中使用bootstrap 4.1s scrollspy函数。我设法让它工作。不过我还想为它添加平滑滚动。在搜索整个互联网后,我仍然没有设法解决它。

这是我正在使用的原始代码(与bootstrap相同)。

<nav id="navbar-example2" class="navbar navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <ul class="nav nav-pills">
    <li class="nav-item">
      <a class="nav-link" href="#fat">@fat</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="#mdo">@mdo</a>
    </li>
    <li class="nav-item dropdown">
      <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
      <div class="dropdown-menu">
        <a class="dropdown-item" href="#one">one</a>
        <a class="dropdown-item" href="#two">two</a>
        <div role="separator" class="dropdown-divider"></div>
        <a class="dropdown-item" href="#three">three</a>
      </div>
    </li>
  </ul>
</nav>
<div data-spy="scroll" data-target="#navbar-example2" data-offset="0">
  <h4 id="fat">@fat</h4>
  <p>...</p>
  <h4 id="mdo">@mdo</h4>
  <p>...</p>
  <h4 id="one">one</h4>
  <p>...</p>
  <h4 id="two">two</h4>
  <p>...</p>
  <h4 id="three">three</h4>
  <p>...</p>
</div>

这就是我试图添加以实现平滑滚动的内容。

      <script>
          $(document).ready(function() {
    $(".nav-item").click(function() {
        var t = $(this).attr("href");
        $('.active').removeClass('active');
        $("html, body").animate({
            scrollTop: $(t).offset().top - 50
        }, {
            duration: 1e3,

        });

        $('body').scrollspy({ target: '#navbar-example2',offset: $(t).offset().top });
        $(this).parent().addClass('active');





        return false;
    });

});



//navbar
var distance = $('#site-header').offset().top,
    $window = $(window);

$window.scroll(function() {
    if ( $window.scrollTop() >= distance ) {
        $('#site-header').addClass('fixed-nav')
    }
    if ( $window.scrollTop() <= distance ) {
        $('#site-header').removeClass('fixed-nav')
    }
});


$('body').scrollspy({ target: '#navbar-example2',offset: 0 });
        </script>

截至目前,我感到困惑,我不明白我做错了什么。因为我无法使它发挥作用。我也试过添加不同的css:s但我无法使其工作。任何帮助都会得到满足。

1 个答案:

答案 0 :(得分:0)

将点击处理程序的jQuery选择器更改为...

$(".nav-link,.dropdown-item").click(function() {
  ...
});

https://www.codeply.com/go/y0LweX2FBY

nav-link选择器的问题在于它没有href,因此点击处理程序没有做任何事情。此外,您可能需要导航栏fixed-top,以便在导航到某个部分时不会滚动。