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 相关文章推荐
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
kmock javascript 单元测试代码
Feb 06 Javascript
JQuery select控件的相关操作实现代码
Sep 14 Javascript
jquery中文乱码的多种解决方法
Jun 21 Javascript
js判断60秒以及倒计时示例代码
Jan 24 Javascript
使用js画图之饼图
Jan 12 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 Javascript
Angularjs 设置全局变量的方法总结
Oct 20 Javascript
JS+CSS3制作炫酷的弹窗效果
Nov 08 Javascript
layui中table表头样式修改方法
Aug 15 Javascript
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 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
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
Php图像处理类代码分享
2012/01/19 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
打开电脑上的QQ的python代码
2013/02/10 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
测试工程师职业规划书
2014/02/06 职场文书
新春寄语大全
2014/04/09 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
评先进个人材料
2014/12/29 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书