网站首页 > 博客文章 正文
为什么要记录滚动行为
这个主要是为了提高用户的体验效果,用户点击浏览器“前进/后退”按钮时记录下此时页面的滚动位置,当用户再次访问到该页面时会自动定位到上一次浏览到的位置(注意:浏览器“刷新”时会记录浏览器滚动条位置并自动滚回,这是浏览器的默认行为)。
Vue路由模式
vue路由跳转提供了两种模式hash和history(默认的是hash模式),都是利用浏览器的存储机制来记录路由。不同的是hash会在地址栏URL中现实“#”符号(但不会被包含在HTTP请求中),可以通过onhashchange的方法来改变页面的跳转(只能改变# 后面的部分)。history则去除了URL中的“#”符号并在HTML5中新增了pushState() 和replaceState() 方法,可以对历史记录进行修改实现更好的控制URL。
Vue路由跳转
Vue实现路由跳转可以直接通过<router-link> 标签(通过to属性来指向目标路由)或者路由事件跳转,事件跳转提供了多种方法。这里我们可以通过history模式搭配this.$router.push()方法来实现路由跳转记录,这样当Vue跳转路由时就会通过 history.pushState()方法的向history 栈中存放一条记录。当点击前进或后退时就会对 history 栈中的记录进行访问,如果存在则执行跳转。
早期思路:
利用SessionStorage或者Vuex进行本地存储,获取当前浏览器滚动条位置(document.documentElement.scrollTop ||document.body.scrollTop||window.pageYOffset ),然后将该路由对应的滚动条位置存入SessionStorage或者Vuex中。当再次访问该路由时通过SessionStorage或者Vuex中获取到该路由的滚动条位置,然后通过设置页面的滚动位置来恢复到上一次浏览的位置。如何使用Vuex可以参考文章:vue实战开发014:状态管理模式Vuex使用详解,SessionStorage使用可以参考文章:vue实战开发020:LocalStorage与SessionStorage的区别与用法。
ScrollBehavior方法
为实现该功能Vue为我们提供了scrollBehavior方法(需支持 history.pushState 的浏览器),该方法接受3个参数分别是to (要进入的路由对象)、 from(离开的路由对象)和savedPosition(记录滚动条的坐标值)。在创建Router实例的时候我们定义下scrollBehavior方法,如果savedPosition存在则定位到保存的位置如果没有则回到顶部即可。
附加:滚动到锚点
描点:通过在文档中设置标记,然后在指定的位置创建到这些锚记的链接。当用户点击相应的链接时就可以快速定位到被标记的位置。原理通过 offsetTop 获取对象到父级窗体顶部的距离,然后赋值给 scrollTop(设置匹配元素的滚动条的垂直位置),就能实现锚点的功能了。
总结:
利用ScrollBehavior方法可以快速的实现记录当前页面的滚动位置,该方法基于HTML5拓展的新功能需要浏览器支持才行,在跳转路由的时候可以使用this.$router.push()方法向history栈中存滚动位置记录。以上内容是小编给大家分享的Vue实战065:ScrollBehavior实现路由记录滚动行为,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。更多Vue实战技巧可以参考专栏:Vue实战系列,在此也非常感谢大家对小编的支持!
猜你喜欢
- 2024-10-21 IntersectionObserver: 教你如何实现一个Vue无限滚动的组件
- 2024-10-21 支持服务器端渲染的移动端Vue组件——NutUI
- 2024-10-21 循序渐进Vue+Element 前端应用开发(6)—常规Element界面组件使用
- 2024-10-21 vue动态路由(支持嵌套路由)和动态菜单UI开发框架,无偿源码
- 2024-10-21 1小时搞定卡片拖拽、自动排列交换位置、拖拽数据存取
- 2024-10-21 如何使用 vue + intro 实现后台管理系统的新手引导
- 2024-10-21 零基础入门vue开发(vue开发步骤)
- 2024-10-21 前端路由与vue-router的基本用法(前端路由实现的两种方式)
- 2024-10-21 Electron-vue客户端开发总结(electron-vue官网)
- 2024-10-21 史上最全 vue-router 讲解 !!!(vue,router)
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 357℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)