vue-router中scrollBehavior的巧妙用法
程序员文章站
2023-11-23 17:40:04
问题:使用keep-alive标签后部分安卓机返回缓存页位置不精确问题
解决方案:
问题:使用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的巧妙用法,希望对大家有所帮助
推荐阅读
-
举例详解Python中yield生成器的用法
-
深入解析Python编程中super关键字的用法
-
iOS中sqlite数据库的原生用法
-
iOS中sqlite的详细用法
-
详解Android TableLayout中stretchColumns、shrinkColumns的用法
-
WPF中log4net的用法
-
C#中String StringBuilder StringBuffer类的用法
-
ASP.NET C#中Application的用法教程
-
SQL中distinct 和 row_number() over() 的区别及用法
-
iOS中UIScrollerView的用法及基于AotoLayout的控件悬停