改进平滑滚动以获得 URL 地址栏上的锚链接

Improve smooth scrolling in order to get anchor links on the URL Adress bar

正如标题所说,我发现 this script 可以平滑滚动并对其进行了一些改进,现在它看起来像这样:

  $('a[href*=#]:not([href=#])').on('click', function() {
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
      if (target.length) {
        $('html,body').animate({
          scrollTop: target.offset().top - 50 // in this case 50px BEFORE
        }, 1000);
        return false;
      }
    }
  });

当用户点击锚点时触发link。

问题是 URL 地址没有改变。我还想更改用户 URL 地址栏,以便在每次用户单击使他滚动的 link 时显示锚点 link。

在此先感谢您能给我的任何帮助。

PS: 你可以看到我测试这个的网站 here.

您可以使用以下方式更改地址:

if (target.length) {
    history.replaceState(null, null, this.hash);
    $('html,body').animate({
        scrollTop: target.offset().top - 50 // in this case 50px BEFORE
    }, 1000);
    return false;
}

如果您想更新浏览器历史记录,请改用:

history.pushState(null, null, this.hash);

More info