vue 页面加载的时候,滚动导航到指定位置
今天遇到一个问题,横向的导航是可滚动的,刷新页面要保持当前选中的导航的状态,并且当前选中的导航要保持的第一个的位置
即根据路由参数,设置dom的滚动长度。
核心代码如下:
created() {
this.handleData();
},
methods: {
handleData() {
// this.actives是当前选中导航的id
// 滚动主要放在了nextTick
this.$nextTick(() => {
const left = document.getElementById(this.actives).offsetLeft;
this.$refs.nav.scrollTo({
left: left,
behavior: "smooth"
})
})
},
},
直接在方法里写scrollTo,传统页面可以,但是用vue框架不生效
参考资料之后,在相关方法的后面加上$nextTick,滚动代码写在这里
思路如下:
首先获取当前选中导航距离左侧的位置,即:const left = document.getElementById(this.actives).offsetLeft;
left的值也可以用vue的ref获取,在这里,我给遍历的每个导航小元素加了id
接下来,用ref获取外层的div并用scrollTo函数,给出距离左侧的滚动位置,即为left的值
这样,页面初始加载的时候就能根据当前路由参数,把选中的导航放到当前页面的第一个位置