vue-router中scrollBehavior的巧妙用法
问题:使用keep-alive标签后部分安卓机返回缓存页位置不精确问题
解决方案:
<div id="app"> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> </div> const router = new Router({ scrollBehavior(to, from, savedPosition) { if (savedPosition && to.meta.keepAlive) { return savedPosition; } return { x: 0, y:0 }; }, });
2. 页面返回出现空白屏问题
问题
【前提】:iOS设备
【步骤】: 页面A是个列表很长-->滑到页脚的时候点击跳转之后到页面B--->再返回A页面
--->屏幕会出现空白遮罩层--->手指轻触屏幕滑动--->遮罩层消失
解决方案一
在接口请求成功后的回调操作完成后进行该操作,例如
// fetchCourseList是一个封装好的Promise请求 fetchCourseList().then(({ data: courses }) => { this.courses = courses; }).then(() => { setTimeout(() => { window.scrollTo(0, 1); window.scrollTo(0, 0); }); });
该方案的弊端: 每个页面都需要做这样的处理,不推荐使用。
解决方案二(推荐)
使用scrollBehavior中的异步滚动操作
const router = new Router({ scrollBehavior(to, from, savedPosition) { // keep-alive 返回缓存页面后记录浏览位置 if (savedPosition && to.meta.keepAlive) { return savedPosition; } // 异步滚动操作 return new Promise((resolve) => { setTimeout(() => { resolve({ x: 0, y: 1 }); }, 0); }); }, });
该方案直接在路由进行处理,兼容每个页面并且页面加载完后并也不会产生1px的滚动位置。
总结
以上所述是小编给大家介绍的vue-router中scrollBehavior的巧妙用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- vue实现同一个页面可以有多个router-view的方法
- 解决vue.js this.$router.push无效的问题
- 基于vue-router 多级路由redirect 重定向的问题
- 全面解析vue router 基本使用(动态路由,嵌套路由)
- 对vue2.0中.vue文件页面跳转之.$router.push的用法详解
- 浅析vue-router jquery和params传参(接收参数)$router $route的区别
- Vue-router 中hash模式和history模式的区别
- vue-router中的hash和history两种模式的区别
- vue router总结 $router和$route及router与 router与route区别
相关文章
vscode+vue cli3.0创建项目配置Prettier+eslint方式
这篇文章主要介绍了vscode+vue cli3.0创建项目配置Prettier+eslint方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-10-10解决创建vue项目后没有vue.config.js文件的问题
这篇文章给大家主要介绍如何解决创建vue项目后没有webpack.config.js(vue.config.js)文件,文中有详细的解决方法,感兴趣的朋友可以参考阅读下2023-07-07vue.js页面加载执行created,mounted的先后顺序说明
这篇文章主要介绍了vue.js页面加载执行created,mounted的先后顺序说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-11-11
最新评论