vue中利用a的href属性配合dom的id实现锚点定位行不通

最近写一个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;
        }   
    }

通过这种方法,落落的问题成功解决了。
在查阅文档时,发现也有其它方法,个人觉得这个更好理解,实现起来更简单。_所以就跟大家分享一下。(#.#)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容