Narutocc / Vue

:smirk_cat:Vue is a progressive framework for building user interfaces. Vue is also perfectly capable of powering sophisticated Single-Page Applications when used in combination with modern tooling and supporting libraries.
1 stars 0 forks source link

vue路由中设置滚动行为(scrollBehavior) #42

Open Narutocc opened 6 years ago

Narutocc commented 6 years ago

vue路由中设置滚动行为(scrollBehavior)

1. 页面滚动之后,刷新浏览器会发现滚动条依然在原来的位置,这是浏览器的默认行为,记录浏览器滚动条默认位置;但是点击浏览器“前进/后退”按钮,会发现页面滚动条从0开始,没有记录上一次的位置;或者是进入到其他路由再返回该路由,也是从0开始。

2. 因为vue是单页面应用框架,整个项目就一个window对象。所以使用vue官方提供的进阶功能——滚动行为,通过这个功能,可以自定义路由切换时页面如何滚动。

router/index.js

let router = new VueRouter({
  routes,
  mode: 'history',
  scrollBehavior (to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    } else {
      if (from.meta.keepAlive) {
        from.meta.savedPosition = document.body.scrollTop
      }
      return {
        x: 0,
        y: to.meta.savedPosition || 0
      }
    }
  }
})