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 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
vs2003 js文件编码问题的解决方法
Mar 20 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
uploadify 3.0 详细使用说明
Jun 18 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
Mar 28 Javascript
从数组中随机取x条不重复数据的JS代码
Dec 24 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
May 07 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
Dec 25 jQuery
浅谈在Vue.js中如何实现时间转换指令
Jan 06 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
[jQuery] 事件和动画详解
Mar 05 jQuery
layUI实现前端分页和后端分页
Jul 27 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 var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
php字符串操作常见问题小结
2016/10/11 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
你真的了解Python的random模块吗?
2017/12/12 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
信号生成及DFT的python实现方式
2020/02/25 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
Python实现手势识别
2020/10/21 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
大学辅导员事迹材料
2014/02/05 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
办理收楼委托书范本
2014/10/09 职场文书
部队2015年终工作总结
2015/04/02 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
经营场所使用证明
2015/06/19 职场文书
windows安装python超详细图文教程
2021/05/21 Python
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server