在我正在使用的SPA中,我们有一个粘性的侧面导航栏,单击该导航栏可以链接到各种页面片段/锚。使用smoothscroll polyfill和以下代码,该站点现在可以平滑滚动到锚点的位置:
smoothscroll.polyfill();
_router.events.subscribe(s => {
if (s instanceof NavigationEnd) {
const tree = _router.parseUrl(_router.url);
if (tree.fragment) {
const element = document.querySelector("#" + tree.fragment);
if (element) { element.scrollIntoView({block: "start", behavior: "smooth"}); }
}
}
});
问题在于,使用“ scrollIntoView”后,页面会跳到动画顶部之前的(0,0)位置。因此,实际上,如果您要逐步浏览页面锚点,则用户体验将使页面始终跳至顶部-而不是仅从用户当前的滚动位置向下滚动。
给我的印象是scrollIntoView应该已经在处理此问题,但是如果没有,我将如何扩展它以计算当前滚动位置并在该位置和新位置(锚点)之间进行动画处理?