vue-router的滚动行为设置

129 阅读1分钟

对于传统的多页应用,浏览器在重新加载页面时会将滚动条位置重置为页面顶部。这是因为重新加载页面时,浏览器会重新渲染整个页面,将其返回到初始状态。

而对于 SPA,因为页面之间的切换是通过 JavaScript 动态加载和更新的,所以切换路由时,浏览器不会重新加载整个页面。因此,进度条通常会停留在原地,而不会重新开始。

可以通过设置 scrollBehavior 选项来控制路由切换时的页面滚动行为。例如,您可以将滚动位置重置为页面顶部,或者保持原来的滚动位置

这样可以使用户在浏览不同页面时保持他们最近的滚动位置,提供更好的用户体验

scrollBehavior

savedPosition参数

savedPosition

返回值

scrollBehavior返回值

延迟滚动

有时候,我们需要在页面中滚动之前稍作等待,例如,当页面切换有过渡效果的时候,我们可能希望等待页面过渡效果结束之后再进行页面的滚动

要做到这一点,我们可以让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)
    })
  },
})