刚刚吃的有点饱,感觉链接上加个 hash 有点丑,就想着去掉。其实这个已经不属于锚点定位。
查了一会文档,发现这个(element.scrollIntoView())属性可以替换锚点来跳转。 关于 scrollIntoView 具体用法,可以参考这里 scrollIntoView查看快速入口
于是我将 a 元素 href属性去掉,添加onClick事件,事件方法如下:
function changeHash(hash) {
document.querySelector(hash).scrollIntoView(true);
}
这个时候问题来了,:target属性解决的锚点偏移问题又回来了。
问题来了,就得继续解决了。
可以在点击后滚动到目标元素位置。
问题又来了,怎么获取到目标元素的位置呢?
由于我这里定位父级不是 body,offsetTop 是不可以的。 我找到 Element.getBoundingClientRect(),getBoundingClientRect快捷参考点击这里多说无益,直接上代码。
function changeHash(hash) {
document.querySelector(hash).scollIntoView(ture);
let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
document.documentElement.scrollTop = document.body.scrollTop = document.querySelector(hash).getBoundingClientRect().top + scrollTop - 70; // 我的页面有个固定定位的nav为70px
}
到这里就结束了,希望对各位小伙伴有点帮助。