首页 > 其他分享 >Vue Router 返回后记住滚动条位置的实现方法

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

时间:2024-08-23 09:14:52浏览次数:6  
标签:Vue 滚动 savedPosition 位置 滚动条 路由 Router hash

要在 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

标签:Vue,滚动,savedPosition,位置,滚动条,路由,Router,hash
From: https://www.cnblogs.com/echohye/p/18375234

相关文章

  • java+vue计算机毕设美食(风情)展示系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球化和互联网的飞速发展,人们对美食的追求已不再局限于地域限制,而是跨越国界,渴望体验不同文化背景下的风味佳肴。美食不仅是味蕾的享受,更是文化......
  • java+vue计算机毕设快递驿站管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着电子商务的蓬勃发展,快递行业迎来了前所未有的增长高峰。每天数以亿计的包裹在各大城市间流转,快递驿站作为连接快递公司与用户的最后一公里服务节......
  • java+vue计算机毕设基于微信小程序英语在线考试系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分,尤其在教育领域,移动学习因其便捷性、灵活性和高效性正逐步成为学习的新......
  • 047、Vue3+TypeScript基础,pinia库store的组合式写法
    01、main.js代码如下:<template><divclass="app"><h2class="title">App.Vue</h2><!--<Page1/>--><br><Page2/></div></template><scriptlang="ts......
  • 045、Vue3+TypeScript基础,pinia库中使用$subscribe订阅数据变动
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//第一步:引入piniaimport{createPinia}from'pinia'constapp=createApp(App);//第二步:创建pinia实例constpinia=......
  • uni-app Vue3项目引入Tailwind CSS
    前情TailwindCSS是一个原子类CSS框架,它将基础的CSS全部拆分为原子级别,同时还补全各种浏览器模式前缀,兼容性也不错。它的工作原理是扫描所有HTML文件、JavaScript组件以及任何模板中的CSS类名,然后生成相应的样式代码并写入到一个静态CSS文件中。TailwindCSS快速、......
  • 基于nodejs+vue在线学习行为的学生课程预警研究与实现[程序+论文+开题]-计算机毕业设
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,在线教育已成为教育领域不可或缺的一部分,它打破了传统教育的时空限制,为广大学生提供了更加灵活多样的学习途径。然而,在线学习环境的......
  • 基于nodejs+vue血库管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码毕设程序文件开题报告内容研究背景在医疗体系中,血液作为拯救生命的重要资源,其管理与调配的高效性直接关系到患者救治的成功率与生命安全。随着医疗技术的不断进步和临床需求的日益增长,传统的人工......
  • 基于Springboot+vue的学生网上请假系统
    文章底部获取项目源码联系方式【万字文档+源码】基于Springboot+vue的学生网上请假系统-可用于毕设-课程设计-练手学习1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管......
  • 基于SpringBoot+Vue的学生作业管理系统的详细设计和实现(25年最新,附源码+论文+部署讲
    文章目录1.前言2.系统演示录像3.论文参考4.代码运行展示图5.技术框架5.1SpringBoot技术介绍5.2Vue技术介绍6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.找我做程序,有什么保障?12.联系我们1.前......