vue项目记录移动端页面浏览位置

描述:假设b、c两个页面
需求:b到c页面的时候需要记录当前b的浏览位置,c返回到b的时候滚动到上次浏览的位置

实现方法:将滚动距离存在vuex、beforeRouteLeave

1.首先在vuex中state定义一个变量来记录当前的浏览的位置

//state中定义数据
  state: {
    carrerTouScroll: {
      height: '' //滚动的距离
     }
    }
 
 //mutations  操作state数据
  mutations: {
   setCarrerTouScroll (state, disdance) {  //管理赛事 滚动距离
      state.carrerTouScroll.height = disdance
    },
  }
 
  //使用getters  有的不加这句也可以,但是有时候不加就不行,所以还是加上吧
    getters: {
      getCarrerTou: state => state.carrerTouScroll 
     }

2.在需要的页面中,也就是b页面使用了beforeRouteLeave 来记录没有路由离开的时候当前浏览的位置

 beforeRouteLeave (to, from, next) {  // 离开路由前
    if (to.meta.touFlag) {
      let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
      this.$store.commit('setCarrerTouScroll', scrollTop)
    } else {
      this.$store.commit('setCarrerTouScroll', 0)
    }
    next()
  },

其中to.meta.touFlag 是自己定义的,因为需要跳转的页面很多,这样比较方便,在需要的页面路由上加一个参数就好了

  {
    path: '/careerAddMainTeam',
    name: 'CareerAddMainTeam',
    component: CareerAddMainTeam,
    meta: {
      touFlag: true
    }
  },

3.最后一步就是在每次b页面获取完数据的时候使用 nextTick ,让页面恢复到上次浏览的位置,一定要使用this.$nextTick

created(){
  // ....执行一些其他操作
  this.$nextTick(() => {
            this.scrollTop = this.$store.state.carrerTouScroll.height
            document.documentElement.scrollTop = this.scrollTop
  })
}

你可能感兴趣的:(vue项目记录移动端页面浏览位置)