【Vue-Router】滚动行为

在 Vue Router 中,你可以使用滚动行为(Scroll Behavior)来定义路由切换时页面滚动的行为。默认情况下,当你切换路由时,页面会滚动到新页面的顶部。然而,你可以通过自定义滚动行为来实现更灵活的滚动效果,比如滚动到特定的元素位置,或者保持滚动位置不变。

要自定义滚动行为,你需要在创建 Vue Router 实例时传递一个 scrollBehavior 函数。这个函数会在路由切换时被调用,它接收三个参数:to 路由对象、from 路由对象和 savedPosition 滚动位置对象(如果有的话)。

以下是一个简单的示例,展示如何自定义滚动行为:

export const router = createRouter({
  history: createWebHistory(),
  routes: [...],
  scrollBehavior(to, from, savedPosition) {
    // 如果有保存的滚动位置,则恢复到保存的位置
    if (savedPosition) {
      return savedPosition;
    }
    // 否则,滚动到新页面的顶部
    else {
      // 返回水平和垂直方向的滚动位置
      return { x: 0, y: 0 };
      // 或者 return { top: 0, left: 0 );
    }
  }
});

在上面的示例中,我们定义了一个名为 scrollBehavior 的函数,并根据情况返回不同的滚动位置。如果有保存的滚动位置(比如用户点击浏览器的后退按钮),则会恢复到之前的位置。如果没有保存的位置,则将滚动位置重置到新页面的顶部。

如果你想在 Vue Router 的 scrollBehavior 函数中执行异步操作,并且希望等待异步操作完成后再设置滚动位置,你可以在该函数中返回一个 Promise。在 Promise 完成后,你可以在 resolve 中设置滚动位置。

以下是一个示例,展示如何在 scrollBehavior 中使用异步操作:

export const router = createRouter({
  routes: [...],
  scrollBehavior(to, from, savedPosition) {
    return new Promise((resolve) => {
      // 模拟异步操作
      setTimeout(() => {
        // 如果有保存的滚动位置,则恢复到保存的位置
        if (savedPosition) {
          resolve(savedPosition);
        }
        // 否则,滚动到新页面的顶部
        else {
          resolve({ x: 0, y: 0 });
        }
      }, 1000); // 假设异步操作需要 1 秒完成
    });
  }
});

在不同路由切换的时候,可以自动滚动到页面的顶部,而不是停留在原先的位置。

const router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    routes: [
        // ...
    ],
    scrollBehavior() {
        return {
            top:0
        }
    },
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秀秀_heo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值