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 相关文章推荐
原生javascript获取元素样式属性值的方法
Dec 25 Javascript
Jquery取得iframe下内容的方法
Nov 18 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
Javascript如何判断数据类型和数组类型
Jun 22 Javascript
jQuery实现的简单百分比进度条效果示例
Aug 01 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 Javascript
微信小程序加载机制及运行机制图解
Nov 27 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 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
FCKeditor添加自定义按钮
2008/03/27 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
nodejs基础应用
2017/02/03 NodeJs
基于Vue实现图书管理功能
2017/10/17 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
Python实现从url中提取域名的几种方法
2014/09/26 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python实现字符串和数字拼接
2020/03/02 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
模具设计与制造专业推荐信
2014/02/16 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
Elasticsearch 基本查询和组合查询
2022/04/19 Python
MySQL如何使备份得数据保持一致
2022/05/02 MySQL