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 相关文章推荐
破除网页鼠标右键被禁用的绝招大全
Dec 27 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
Dec 07 Javascript
JavaScript prototype 使用介绍
Aug 29 Javascript
javascript的parseFloat()方法精度问题探讨
Nov 26 Javascript
Javascript中克隆一个数组的实现代码
Dec 06 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
Jun 10 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
纯css实现窗户玻璃雨滴逼真效果
Aug 23 Javascript
js+div实现文字滚动和图片切换效果代码
Aug 27 Javascript
JavaScript 中Date对象的格式化代码方法汇总
Sep 06 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 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
mysql5写入和读出乱码解决
2006/11/25 PHP
PHP下几种删除目录的方法总结
2007/08/19 PHP
php实现网页端验证码功能
2017/07/11 PHP
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python del()函数用法
2013/03/24 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python 实现字符串下标的输出功能
2020/02/13 Python
python读取mysql数据绘制条形图
2020/03/25 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
python实现数字炸弹游戏程序
2020/07/17 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
倡议书格式
2014/04/14 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
团员个人年度总结
2015/02/26 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书