问题描述
默认情况下,Vue项目下的页面router.push('/path/to/page')每次路由切换后,如果当前页面已经滚动到中间或者底部的时候,跳到下一个页面,默认也是scoll到相同的位置(中间或者底部),但是我们还是希望到了新页面,当前内容还是滚动到顶端。
这个应该是其他SAP(Single Page Applications )都差不多会遇到的问题。
解决方案
- 在每个页面的生命周期mounted下面,写代码让页面滚动到顶部
mounted () {
  window.scrollTo(0, 0);//滚动页面到最顶端
}
- 以上在每个页面都需要写代码,会比较麻烦,我们还可以在路由的代码中,监听页面切换时候,执行滚动到顶部的操作
在router/index.js里面,在export default router上面增加如下代码:
router.beforeEach((to, from, next) => {
    window.scrollTo(0, 0);//滚动页面到最顶端
    next();
});
export default router
当然你也可以根据某些条件来判断是否需要滚动到最顶端,例如给router增加meta:
const routes = [
    {
        path: '/',
        name: 'Home',
        component: () => import('../views/Home')
    },
    {
        path: '/another-page',
        name: 'AnotherPage',
        component: () => import('../views/AnotherPage.vue'),
        // scrollToTop 是否滚动到最顶端
        meta: {scrollToTop: true}
    },
]
const router = new VueRouter({
    routes
});
router.beforeEach((to, from, next) => {
    let scrollToTop = to.meta.scrollToTop;
    if (scrollToTop) {
        window.scrollTo(0, 0);
    }
    next();
});
export default router

文章评论