vue-router中scrollBehavior的巧妙用法 - 送码网
vue-router中scrollBehavior的巧妙用法
来源:前端全栈君     阅读:878
易滴互联
发布于 2018-12-03 23:35
查看主页

问题:使用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 }; },});

前台全栈学习交流圈:866109386,面向1-3经验年前台开发人员,帮助突破技术瓶颈,提升思维能力
群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

  1. 页面返回出现空白屏问题

问题

【前提】: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);  }); },});

前台全栈学习交流圈:866109386,面向1-3经验年前台开发人员,帮助突破技术瓶颈,提升思维能力
群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

该方案直接在路由进行解决,兼容每个页面并且页面加载完后并也不会产生1px的滚动位置。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
首页
搜索
订单
购物车
我的