[vuejs/vue-router]动态路由间切换,如何让页面回到顶部

2024-05-08 413 views
8
const scrollBehavior = (to, from, savedPosition) => {
  return { x: 0, y: 0 }
}
const router = new VueRouter({
  mode: 'history',
  scrollBehavior,
  routes
})

http://ip:port/Prayer/end --> http://ip:port/Prayer/all 想让页面回到顶部,但是都不行

回答

1

我也遇到这个问题,请问你解决了么?

9

@jinjinwa 作者应该没有时间处理这种问题,影响不大我就不管了,你可以去StackOverflow提问

7

router.beforeEach((to, from, next) => { document.body.scrollTop = 0; next() }); 在路由切换的时候手动 回到顶部了

8
const router = new VueRouter({
  routes: [...],
  scrollBehavior(to, from, savedPosition) {
    return { x: 0, y: 0 }
  }
})

实例化 vueRouter 的时候,提供 scrollBehavior 选项

2

router.beforeEach((to, from, next) => { document.body.scrollTop = 0; next() }); 在路由切换的时候手动 回到顶部了

@Maysjtu SSR 模式不可使用此方式,当触发路由之后,未跳转到下一个页面时,当前页面会回到顶端。

7

Router.afterEach((to, from) => { let bodySrcollTop = document.body.scrollTop if (bodySrcollTop !== 0) { document.body.scrollTop = 0 return } let docSrcollTop = document.documentElement.scrollTop if (docSrcollTop !== 0) { document.documentElement.scrollTop = 0 } }) 这方法能解决pc端浏览器的问题,但是手机上的部分浏览器(三星自带的浏览器可以)依然回不到顶部。。

0

是不是有异步请求的问题?现在支持 async-scrolling 了:

scrollBehavior (to, from, savedPosition) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({ x: 0, y: 0 })
    }, 500)
  })
}