Javascript Vue路由器是否在路线上保存滚动位置,并在返回时返回到该位置?

Javascript Vue路由器是否在路线上保存滚动位置,并在返回时返回到该位置?,javascript,vue.js,vue-router,Javascript,Vue.js,Vue Router,我使用的是Vue路由器和scrollBehavior,每个路由仍然会在页面顶部加载一个文件(0,0),而不是记住我的滚动位置。想想我错过了什么 这是我的路由器代码: const scrollBehavior = (to, from, savedPosition) => { if (savedPosition) { return savedPosition; } else { return { x: 0, y: 0 }; } }; const router = n

我使用的是Vue路由器和scrollBehavior,每个路由仍然会在页面顶部加载一个文件(0,0),而不是记住我的滚动位置。想想我错过了什么

这是我的路由器代码:

const scrollBehavior = (to, from, savedPosition) => {
  if (savedPosition) {
    return savedPosition;
  } else {
    return { x: 0, y: 0 };
  }
};
const router = new VueRouter({
  mode: "history",
  base: process.env.BASE_URL,
  routes,
  scrollBehavior,
});

您是否在正在测试的浏览器中检查了
历史记录.pushState
支持?另外,记录
savedPosition
,因为如果值不正确,则不会发生滚动。创建路由器实例时,您可以提供给定的
scrollBehavior
函数

const路由器=新的VueRouter({
路线:[……],
滚动行为(到、从、保存位置){
返回{x:0,y:0}
}
})
scrollBehavior
函数接收往返路由对象。第三个参数,
savedPosition
,仅当这是
popstate
导航(由浏览器的后退/前进按钮触发)时才可用

该函数可以返回滚动位置对象。对象的形式可以是:

{x:number,y:number}
//或
{selector:string,offset?:{x:number,y:number}//offset仅在2.6.0中受支持+
如果返回falsy值或空对象,则不会发生滚动

注意:此功能仅在浏览器支持
history.pushState

如果需要,可以在导航之前存储当前滚动偏移量。这是你可以做到的

const container = document.querySelector('.container')
let scrollOffset = {x: container.scrollTop, y: container.scrollLeft}

现在,在路由之前存储
scrollOffset
,当
savedPosition
无效时,您可以使用此对象。

您是否检查了正在测试的浏览器中的
历史记录。pushState
支持?另外,记录
savedPosition
,因为如果值不正确,则不会发生滚动。我使用的是最新的Chrome,因此我假设它支持
history.pushState
。popstate可能是问题所在,因为我在应用程序中使用的自定义按钮在某些情况下是router.push,在其他情况下是router.go(n)。有没有办法让router.push尊重popstate?router.push将不起作用,如果通过浏览器向后/向前导航,则savedPoition将只包含偏移值。您可以从这里了解实现,谢谢。我就是这么想的。在您的答案中,只考虑x=scrollLeft和y=scrollTop(我想):)在路由之前,如何存储scrollOffset?在视图对象中?还是路线?怎么用?有人能举个例子吗?