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 居中漂浮广告
Mar 21 Javascript
读jQuery之一(对象的组成)
Jun 11 Javascript
Js四则运算函数代码
Jul 21 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
Jquery获取当前城市的天气信息
Aug 05 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
Aug 31 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
vue无限轮播插件代码实例
May 10 Javascript
js实现二级联动简单实例
Jan 11 Javascript
原生js滑动轮播封装
Jul 31 Javascript
vue实现登陆页面开发实践
May 30 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
使用PHP的日期与时间函数技巧
2008/04/24 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Django保护敏感信息的方法示例
2019/05/09 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
函授本科毕业自我鉴定
2013/10/09 职场文书
车工岗位职责
2013/11/26 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
给学校的建议书
2014/03/12 职场文书
迎新晚会主持词
2014/03/24 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
分公司任命书
2014/06/06 职场文书