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 相关文章推荐
JavaScript中URL编码函数代码
Jan 11 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
Sep 21 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
Aug 15 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
Feb 21 Javascript
JavaScript 函数的执行过程
May 09 Javascript
jQuery监听文件上传实现进度条效果的方法
Oct 16 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
Sep 19 Javascript
实例解析ES6 Proxy使用场景介绍
Jan 08 Javascript
vue页面跳转后返回原页面初始位置方法
Feb 11 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
Jul 13 Javascript
微信小程序获取用户openid的实现
Dec 24 Javascript
vue 兄弟组件的信息传递的方法实例详解
Aug 30 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
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
Prototype Class对象学习
2009/07/19 Javascript
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
js中!和!!的区别与用法
2020/05/09 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
基于Python闭包及其作用域详解
2017/08/28 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
护士自我鉴定
2013/10/23 职场文书
幼教个人求职信范文
2013/12/02 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
解除财产保全担保书
2014/05/20 职场文书
领导班子对照检查材料
2014/09/22 职场文书
学校党员个人问题整改措施思想汇报
2014/10/08 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis