从其他页面平滑滚动 Javascript
Smooth scroll from another pages by Javascript
我用 javascript 创建了一个平滑的滚动条。我可以在页面内滚动。但是,当来自另一个页面时,它会转到#position 目录,然后开始动画。
写在snippetif (urlHash) {}
区
我希望该页面首先显示正文顶部,然后在 1 秒后移动到 link 位置,当来自另一个页面时,例如单击 index.html#block02
。
我想不通。请帮忙。 非常感谢。
const anchors = document.querySelectorAll('a[href^="#"]');
const header = document.querySelector('header').offsetHeight;
const urlHash = location.hash;
for ( let i = 0; i < anchors.length; i++ ) {
anchors[i].addEventListener('click', (e) => {
e.preventDefault();
const href= anchors[i].getAttribute("href");
if (href !== '#top') {
const target = document.getElementById(href.replace('#', ''));
const position = window.pageYOffset + target.getBoundingClientRect().top - header;
window.scroll({
top: position,
behavior: 'smooth'
});
} else {
window.scroll({
top: 0,
behavior: 'smooth'
});
}
});
}
window.addEventListener('DOMContentLoaded', (event) => {
if (urlHash) {
window.scrollTo({top:0});
setTimeout(function () {
const urlTarget = document.getElementById(urlHash.replace('#', ''));
const urlPosition = window.pageYOffset + urlTarget.getBoundingClientRect().top - header;
window.scroll({
top: urlPosition,
behavior: 'smooth'
});
}, 1000);
}
});
header {position: fixed; width:100%; height: 100px; text-align:center; border-bottom:1px solid #ccc;}
div {height: 200vh;}
a {display: inline-block;}
main{padding-top: 100px;}
<header>header</header>
<main>
<a href="#block01">block01へ移動</a>
<a href="#block02">block02へ移動</a>
<div id="block01">block01</div>
<div id="block02">block02</div>
<a href="#top">topへ戻る</a>
</main>
只需重置脚本顶部的滚动位置:
setTimeout(() => { window.scrollTo(0, 0) }, 0) // Here
const anchors = document.querySelectorAll('a[href^="#"]');
const header = document.querySelector('header').offsetHeight;
const urlHash = location.hash;
// ...