使用vue-router scrollBehavior跳转回原来页面的位置,记住之前的位置

首先在定义路由的页面:

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes,
  scrollBehavior(to, from, savedPosition) {
    console.log(savedPosition, to.meta.savedPosition)
    if (savedPosition) {
      return savedPosition
    } else {
      if (from.meta.keepAlive) {
        from.meta.savedPosition = from.meta.y;
      }
      return {
        x: 0,
        y: to.meta.savedPosition || 0
      }
    }
  }
});

然后定义两个公共方法:
getScrollTop

//获取滚动距离 并赋值给meta.y
export function getScrollTop(node, router, n){
  console.log(n)
  let that = this
  let dom = document.querySelector(node)
  // console.log(dom)
  dom.onscroll=function(){
    if (dom.timerId) clearTimeout(dom.timerId)
    dom.timerId = setTimeout(() => {
      if(n){
        router.meta.y = n
      }else{
        router.meta.y = dom.scrollTop
      }
      console.log(dom.scrollTop)
    }, 300)
  }
}

在mounted中调用
mounted() {
    getScrollTop('.scrollBox', this.$route)
}

setScrollTop()

//设置滚动距离
export function setScrollTop(node, router, n){
  console.log(router.meta, n, router.meta.savedPosition)
  let dom = document.querySelector(node)
  if(n){
    dom.scrollTop = n
  }else{
  // 返回上一页时使用router.meta.savedPosition赋值。没有跳转,在当前页赋值用dom.scrollTop
    dom.scrollTop = router.meta.savedPosition || dom.scrollTop
  }
}

在keepAlive为true的页面调用时
activated(){
   setScrollTop('.scrollBox', this.$route)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值