vue-router中scrollBehavior的巧妙用法


Posted in Javascript onJuly 09, 2018

问题:使用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页面
         --->屏幕会出现空白遮罩层--->手指轻触屏幕滑动--->遮罩层消失

vue-router中scrollBehavior的巧妙用法 

解决方案一

在接口请求成功后的回调操作完成后进行该操作,例如

// 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的巧妙用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
写自已的js类库需要的核心代码
Jul 16 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
Jan 31 Javascript
jquery实现通用的内容渐显Tab选项卡效果
Sep 07 Javascript
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
微信小程序实现传参数的几种方法示例
Jan 10 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
Apr 04 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 Javascript
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
Apr 03 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
Jul 09 #Javascript
Vue自定义指令封装节流函数的方法示例
Jul 09 #Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 #Javascript
vue-cli配置环境变量的方法
Jul 09 #Javascript
JS逻辑运算符短路操作实例分析
Jul 09 #Javascript
微信小程序中时间戳和日期的相互转换问题
Jul 09 #Javascript
使用async await 封装 axios的方法
Jul 09 #Javascript
You might like
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
php事件驱动化设计详解
2016/11/10 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python opencv实现运动检测
2018/07/10 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
职业技术学校毕业生推荐信
2013/12/03 职场文书
大学生村官工作感言
2014/01/10 职场文书
军训自我鉴定100字
2014/02/13 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
网络管理员岗位职责
2014/03/17 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书