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取滚动条的尺寸的函数代码
Nov 30 Javascript
javascript闭包的高级使用方法实例
Jul 04 Javascript
JQuery解析XML的方法小结
Apr 02 Javascript
使用plupload自定义参数实现多文件上传
Jul 19 Javascript
jquery对Json的各种遍历方法总结(必看篇)
Sep 29 Javascript
javascript读取文本节点方法小结
Dec 15 Javascript
D3.js中强制异步文件读取同步的几种方法
Feb 06 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 Javascript
vue按需引入element Transfer 穿梭框
Sep 30 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
Aug 28 Javascript
vuejs router history 配置到iis的方法
Sep 20 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中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
php Ubb代码编辑器函数代码
2012/07/05 PHP
基于PHP文件操作的详解
2013/06/05 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
Python解释执行原理分析
2014/08/22 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
python3中数组逆序输出方法
2020/12/01 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
入职担保书范文
2014/05/21 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
法人代表资格证明书
2015/06/18 职场文书
中秋节主题班会
2015/08/14 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers
详解SQL报错盲注
2022/07/23 SQL Server