最近写一个vue的项目,有一个地方需要使用锚点定位。
html中传统锚点定位方法就是利用a标签的href属性值与dom元素的id值实现的,例如:
<a href="#tiaozhuan1">早年经历</a>
<h3 id="tiaozhuan1">早年经历</h3>
结果:点击a,跳转到h3。
在这个项目中,落落使用的是vue-router实现的页面跳转。因此,如果按照传统方法进行锚点定位,直接就跳转到了一个新的页面,而不是预期中指定的dom元素。开始的时候落落都要怀疑自己是不是锚点定位的方式错了。后来查阅文档发现,传统的锚点定位方式在使用了vue-router时是行不通的哦。
有解决办法吗?必须滴!
仔细观察不难发现,锚点定位的本质就是修改容器的滚动高度。
所以呢,锚点定位可以模拟成修改页面卷动值,在chrome浏览器中是document.body.scrollTop,在firefox浏览器中是document.documentElement.scrollTop。那么这个值要设置成多少比较合适呢?给一个确切的数字吗?可以是可以,但是如果页面是动态的呢?显然不是最理想的。
js中有一个关于定位的值——offsetTop。
假设obj 是html中的一个控件,obj.offsetTop 指的是 obj 距离上方或上层控件的位置,整型,单位像素。
所以呢,这个卷动值完全可以通过obj.offsetTop来获取。
例:
//#type就是要跳转到的dom元素,#+dom元素的id属性值
<a href="javascript:void(0)" @click="goAnchor('#type')">游戏</a>
methods:{
goAnchor:function(type) {
var anchor = this.$el.querySelector("#type")
// chrome
document.body.scrollTop = anchor.offsetTop;
// firefox
document.documentElement.scrollTop = anchor.offsetTop;
}
}
通过这种方法,落落的问题成功解决了。
在查阅文档时,发现也有其它方法,个人觉得这个更好理解,实现起来更简单。_所以就跟大家分享一下。(#.#)