人这辈子一共会死三次。
第一次是你的心脏停止跳动,那么从生物的角度来说,你死了;
第二次是在葬礼上,认识你的人都来祭奠,那么你在社会上的地位就死了;
第三次是在最后一个记得你的人死后,那你就真的死了。
说明
最近进行的一个vue项目,使用vue-router实现页面跳转。
由于有页面需要使用锚点定位,刚开始使用html中传统锚点定位方法,也就是利用a标签的href属性值与dom元素的id值实现的,例如:
<a href="#abstract">概述</a>
<h3 id="abstract">概述</h3>
结果是当点击链接a后,直接就跳转到了一个新的页面,而不是预期中指定的dom元素。
后来查阅文档查资料发现,传统的锚点定位方式在使用了vue-router时是不可行的。 仔细观察不难发现,锚点定位的本质就是修改容器的滚动高度.
所以呢,锚点定位可以模拟成修改页面卷动值,卷动值是scrollTop。而如何获取卷动值可通过offsetTop来获取。
offsetTop与scrollTop的区别
属性 | 说明 |
---|---|
scrollTop | 对象的最顶部到对象在当前窗口显示的范围内的顶边的距离。即在出现了纵向滚动条的情况下,滚动条拉动的距离。是指某个可滚动区块向下滚动的距离,比如向下滚动了10个像素,那么这个元素的scrollTop属性值就是10,这个属性的值是可读写的,且不需要设置position |
offsetTop | 则是元素的上边框与父元素的上边框的绝对距离,不能对其进行赋值 |
具体实现
<!-- 跳转锚点 -->
<a href="javascript:void(0)" @click="goAnchor('production')">
<el-menu-item index="7" class="last-menu">作品</el-menu-item>
</a>
<!-- 跳转目的地 -->
<div class="production-box" id="production">
<span class="item-name">作品</span>
</div>
在html代码中需要把a标签的href设为不进行任何操作,否则还会跳页
goAnchor(id) {
var anchor = document.getElementById(id);
// chrome
document.body.scrollTop = anchor.offsetTop;
// firefox
document.documentElement.scrollTop = anchor.offsetTop;
// safari
window.pageYOffset = anchor.offsetTop;
}