对于传统的多页应用,浏览器在重新加载页面时会将滚动条位置重置为页面顶部。这是因为重新加载页面时,浏览器会重新渲染整个页面,将其返回到初始状态。
而对于 SPA,因为页面之间的切换是通过 JavaScript 动态加载和更新的,所以切换路由时,浏览器不会重新加载整个页面。因此,进度条通常会停留在原地,而不会重新开始。
可以通过设置 scrollBehavior
选项来控制路由切换时的页面滚动行为。例如,您可以将滚动位置重置为页面顶部,或者保持原来的滚动位置
这样可以使用户在浏览不同页面时保持他们最近的滚动位置,提供更好的用户体验
scrollBehavior
savedPosition参数
返回值
延迟滚动
有时候,我们需要在页面中滚动之前稍作等待,例如,当页面切换有过渡效果的时候,我们可能希望等待页面过渡效果结束之后再进行页面的滚动
要做到这一点,我们可以让scrollBehavior
方法返回一个 Promise, 通过该Promise的resolve方法返回所需的位置描述符
也就是说如果scrollBehavior
方法的返回值并不是promise的时候,会使用Promise.resolve
方法进行包裹
const router = createRouter({
scrollBehavior(to, from, savedPosition) {
return new Promise((resolve, reject) => {
// 过0.5s,页面再滚动到页面左上角
setTimeout(() => {
resolve({ left: 0, top: 0 })
}, 500)
})
},
})