vue-router如何在返回时返回到上次滚动位置 方法集锦
来源:互联网 发布:mac library文件夹在哪 编辑:程序博客网 时间:2024/06/06 00:19
方法一:
1.在router.js里面(即路由文件中),此时模式为 history
const router = new VueRouter({ mode: 'history', routes, scrollBehavior (to, from, savedPosition) { if (savedPosition) { return savedPosition } else { if (from.meta.keepAlive) { from.meta.savedPosition = document.body.scrollTop } return { x: 0, y: to.meta.savedPosition || 0 } } }})
2.在router.js里面需要记录位置的单页面里面let routes = [ { path: '/', name: 'home', component: home, meta: { title: 'home', keepAlive: true } }
3.App.vue里面<div id="app"> 这样写的意义就是不缓存所有页面,哪个地方写了 keepAlive:true,哪个地方就记录位置(加缓存)<keep-alive > <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view>
4.位置确实记录上了(加缓存,返回不刷新页面),也就是说,返回不触发created,所以有些页面需要返回触发的东西都写在activated里面。其实整个过程很简单,代码也很干练,因为这是路由自带的功能,只不过之前没有发现罢了方法二:
beforeRouteLeave(to, from, next){ let position = window.scrollY() this.$store.commit('SAVE_POSITION', position) //离开路由时把位置存起来
next()}
在页面中取值updated () { this.$nextTick(function(){ let position = this.$store.state.position //返回页面取出来 window.scroll(0, position) }) }
用updated 或者 beforeUpdate 钩子都可以 代码都写在要保存滑动距离的界面
方法三:用默认的hash模式的
一个list页点击进入detail页,我在这时记录下list页滚动条的位置,然后在detail页返回到list页时设置滚动条位置为刚才保存那个值。
// list页route中的data钩子route : { data : function () { var _this = this; // 返回同一个位置 var scrollTop = sessionStorage.getItem("scrollTop"); if (scrollTop) { _this.$nextTick(function () { $(".abuild-record-layout").scrollTop(scrollTop); }); } }}
$nextTick将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick
一样,不同的是回调的 this
自动绑定到调用它的实例上。
方法四:scrollBehavior方法
1.router文件中设置为 mode: 'history', 模式
2.router设置
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return { x: 0, y: 0 }
}
}
3.详情页返回列表页时, 用 history.back() 返回
阅读全文
2 0
- vue-router如何在返回时返回到上次滚动位置 方法集锦
- vue-router如何在返回时返回到上次滚动位置 方法集锦
- js:返回到页面时滚动到上次浏览位置
- vue通过 vue.mixin(混合)实现 任意页面记录滚动条位置(路由router.query参数一致) 并跳转到上次的位置
- 新页面中返回到上次浏览的页面位置
- vue通过滚动行为实现从列表到详情,返回列表原位置
- 微信返回上一页停留在上次点击的位置
- RecyclerView重新得到焦点返回上次失去焦点的位置
- IDEA 快速返回上次查看代码的位置
- vue-router 滚动行为
- jquery如何让页面的滚动条返回到顶部
- vue-router 不能判断页面是否是返回
- 如何保存ListView上次的滚动条的位置
- 返回上次请求页面
- 返回上次请求页面
- 返回上次请求页面
- 如何作到在页面POSTBACK刷新后,使LISTBOX的滚动条仍然保持上次的位置
- vue 滚动条实现平滑滚动到某个位置
- java手动生成验证码
- UNIX系统下的基于TCP协议的网络通信程序
- Ubuntu PetaLinux安装教程
- 前端性能优化
- 框架、模式基础概念 和 常见的java框架、MVC
- vue-router如何在返回时返回到上次滚动位置 方法集锦
- HDU Wolf and Rabbit
- 选择排序
- viewpager嵌套gradview,点击无响应
- SQL注入分类
- 九月十一日——filter的基础
- Maven(二) 构建聚合项目,父子项目
- c++初级 之 反转链表
- MFC编程调试总结(1):”在另一个编辑器中已打开”