单击锚链接时,如何实现平滑滚动到不同页面上的部分?



由于我取得了一些进展,我正在编辑这篇文章。
我的主菜单水平位于页面顶部,带有position:fixed。我想这样做,当单击链接时,页面可以平滑地向下滚动到相应的目标。由于我的粘性标题,所述目标需要与视口顶部偏移显示。

我的 HTML/CSS:

<style>
#main_menu {
position: fixed;
}
</style>
<body>
<nav id="main_menu">
<ul>
<li><a href="#link1">Link 1</a></li>
<li><a href="#link2">Link 2</a></li>
<li><a href="different-page.html#link3">Link 3</a></li>
</ul>
</nav>

索引的主要部分.html:

<main>
<h1 id="link1">Heading 1</h1>
<!-- some content -->
<h1 id="link2">Heading 2</h1>
<!-- some content -->
</main>

不同页面的主要部分.html:

<main>
<!-- some content -->
<!-- some content -->
<!-- some content -->
<!-- some content -->
<h1 id="link3">Heading 3</h1>
<!-- some content -->
</main>

编辑: 我现在使用它在部分之间平滑滚动:

$('a[href*="#"]:not([href="#"])').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 - 220
}, 1000);
return false;
}
}
});

它适用于在一个页面上的各个部分之间平滑滚动。但是,如果我链接到其他页面上的部分,它将无法正常工作。
示例:
<li><a href="#link1">Link 1</a></li><h1 id="link1">Heading 1</h1>作品。单击时,页面向下滚动到标题 1,然后标题 1 显示在视口顶部下方 200 像素处,并且不会被我的粘性标题覆盖。
<li><a href="different-page.html#link3">Link 3</a></li>从索引.html到different-page.html部分<h1 id="link3">Heading 3</h1>的链接 这也有效,只是 -200 的偏移量被忽略。这意味着部分顶部与视口顶部对齐,因此它被粘性导航覆盖。
我猜去一个新页面会以某种方式弄乱我的 js?我希望它始终注意偏移量,以便当我链接到另一个页面上的特定部分时,该部分从视口顶部加载 200px(因此在我的标题下方,而不是下方)。
希望我解释正确。

我更改了代码 一些 CSS 更改-

<style>
html {
scroll-behavior: smooth;
}
#main_menu {
position: fixed;
}
</style>
<body>
<nav id="main_menu">
<ul>
<li><a href="#link1">Link 1</a></li>
<li><a href="#link2">Link 2</a></li>
<li><a href="#link3">Link 3</a></li>
</ul>
</nav>
<main style="overflow-y:scroll;height:58vh">
<h1 id="link1">Heading 1</h1>
<!-- some content -->
<h1 id="link2">Heading 2</h1>
<!-- some content -->
<h1 id="link3">Heading 3</h1>
<!-- some content -->
</main>
<script>
// ???
</script>
</body>

最新更新