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 相关文章推荐
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
密码框显示提示文字jquery示例
Aug 29 Javascript
完美解决AJAX跨域问题
Nov 01 Javascript
jquery使整个div区域可以点击的方法
Jun 24 Javascript
JS+CSS实现DIV层的展开、收缩效果
Jan 28 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 Javascript
template.js前端模板引擎使用详解
Oct 10 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
Oct 29 Javascript
Vue动态路由缓存不相互影响的解决办法
Feb 19 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新手谈谈我的学习心得
2007/02/25 PHP
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
浅谈js中的bind
2019/03/18 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
Python中的进程分支fork和exec详解
2015/04/11 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
天网工程实施方案
2014/03/26 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers