Vue Router 返回后记住滚动条位置的实现方法

要在 Vue Router 中实现返回时记住滚动条位置的功能,可以利用 Vue Router 提供的 scrollBehavior 函数。这允许在导航时控制页面的滚动行为,包括返回之前访问的页面时恢复到之前的滚动位置。

实现方法

以下是一个示例,展示如何在 Vue 3 中使用 scrollBehavior 实现返回时记住滚动条位置:

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';

const routes: Array<RouteRecordRaw> = [
  // 你的路由配置
];

const router = createRouter({
  history: createWebHistory(),
  routes,
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      // 如果存在保存的位置(即用户使用浏览器的前进/后退按钮),则返回到该位置
      return savedPosition;
    } else {
      // 否则滚动到顶部
      return { top: 0 };
    }
  }
});

export default router;

解释

  1. scrollBehavior 函数:

    • to:即将进入的目标路由对象。
    • from:当前导航离开的路由对象。
    • savedPosition:保存的滚动位置。如果使用了浏览器的前进/后退按钮,这个值会被保存下来。
  2. 保存的滚动位置:

    • savedPosition 存在时,表示这是用户通过浏览器的前进/后退按钮进行的导航,此时我们希望恢复到之前的滚动位置。因此返回 savedPosition 对象,它包含了 topleft 值(即滚动条的纵向和横向位置)。
  3. 滚动到顶部:

    • 如果 savedPosition 不存在,这意味着用户是通过点击链接或编程导航到新页面。此时我们通常希望页面滚动到顶部,所以返回 { top: 0 }

可选的增强功能

还可以根据 tofrom 路由的不同状态来定制更多的滚动行为。例如:

  • 仅在特定路由或页面上应用滚动行为。
  • 根据锚点或 hash 值滚动到特定位置。

示例:处理 hash 滚动

可以添加对 hash 的处理,如果用户导航到一个带有 hash 的 URL,则滚动到对应的元素:

scrollBehavior(to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition;
  } else if (to.hash) {
    return {
      el: to.hash,
      behavior: 'smooth',
    };
  } else {
    return { top: 0 };
  }
}

在这个示例中,如果路由中带有 hash,例如 #section2,页面将平滑滚动到对应的元素位置。

https://www.jb51.net/javascript/2975655dl.htm

posted @   槑孒  阅读(403)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2022-08-23 ::v-deep usage as a combinator has been deprecated. Use :deep(<inner-selector>) instead.
2022-08-23 Vue2按需引入elementUI组件
点击右上角即可分享
微信分享提示