vue 组件的 scrollBehavior 2
原文链接https://www.jianshu.com/p/c805b74e1f14?utm_campaign
浏览器对用户访问网页的记录
- 在聊如何管理
vue
组件滚动行为之前,先简单说说(毕竟深入了我也很模糊o(╯□╰)o)浏览器是如何对用户访问过的页面的保持,浏览器历史记录是对用户所访问的页面按时间顺序进行的记录和保存,以上是MDN对浏览器就如何跟踪用户访问过网页的解释性说明。 - 通常我们很少会对页面回退或前进进行操作,在浏览器用户界面上提供有前进、回退按钮,页面跳转到离开页面之前的位置,而不是重新刷新页面,这个功能是由浏览器引擎(与渲染引擎、解析引擎概念不同)来完成的。当用户进入一个页面的时候,会往 history 栈中放入当前的记录,对页面级别的操作通过操作内置对象
history
可以满足一些需求。
vue对访问记录的管理
- 进入正题,
vue
路由跳转就是通过对history.pushState()
和history.replaceState()
方法的模拟来实现,会往history
栈中存放一条记录,这也是为什么vue
的router.push
方法只能在支持history.pushState()
方法的浏览器中使用,当调用router.go()
或者router.back()
方法的时候就和history.go()
、history.back()
效果一样,都是对history
栈中的记录进行访问,上述行为与通过浏览器的回退和前进效果也是一样。
但是,在不加处理的情况下,组件的滚动行为会跟我们想象的不同。
vue组件滚动行为
- 设置三个路由
/home
、/list
、/about
,即对应三个不同的组件, -
<ul class="tab"> <li> <router-link to="/" >首页</router-link> </li> <li> <router-link to="/list" >列表</router-link> </li> <li> <router-link to="/about" >关于</router-link> </li> <li> <a href="#" @click='() => { this.$router.back() }'>点击回退</a> </li> </ul> <router-view></router-view>
- 每个组件的结构都是
ul>li
的结构 -
<!-- 以 home 组件为例 --> <ul class="list_content home"> <li v-for='i in 10'>{{ i }}</li> </ul>
new Vue({ router, data: { timerId: '' }, mounted () { window.addEventListener('scroll', this.justifyPos) }, methods: { justifyPos () { if (this.timerId) clearTimeout(this.timerId) this.timerId = setTimeout(() => { this.$route.meta.y = window.pageYOffset }, 300) } } }).$mount('#app')
详细内容:https://www.jianshu.com/p/c805b74e1f14?utm_campaign
- 每个组件的结构都是
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类