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操作checkbox用document.getElementById实现
Oct 12 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
JavaScript中对JSON对象的基本操作示例
May 21 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
Jun 13 Javascript
微信小程序模拟cookie的实现
Jun 20 Javascript
Vue中遍历数组的新方法实例详解
Jul 21 Javascript
关于vue表单提交防双/多击的例子
Oct 31 Javascript
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
PHP控制网页过期时间的代码
2008/09/28 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Django Rest framework频率原理与限制
2019/07/26 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
大学生党员自我剖析材料
2014/10/06 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
2015年保送生自荐信
2015/03/24 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle