iscroll.js的上拉下拉刷新时无法回弹的解决方法


Posted in Javascript onFebruary 18, 2016

使用过iscroll.js的上拉下拉刷新效果的朋友应该都碰到过这个问题:在iOS的浏览器中,上拉或下拉刷新时,当手指划出屏幕后,页面无法弹回。很多人因为解决不了这个问题,干脆就那样不解决了,还有的直接就不用HTML了,使用原生代替HTML页面。

相信很多朋友也有自己的解决办法,只是没写出来,所以网上都搜不到解决方案。在很多QQ群里面也有很多人在问该怎么解决这个问题,所以我写这篇文章记录一下我的解决方案,希望对一些朋友有所帮助。

上拉下拉刷新的主要代码:

myScroll = new iScroll('wrapper', {
  vScrollbar: false,
  useTransition: true,
  topOffset: pullDownOffset,
  onRefresh: function () {
   if (pullDownEl.className.match('loading')) {
    pullDownEl.className = '';
    pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Pull down to refresh...';
   } else if (pullUpEl.className.match('loading')) {
    pullUpEl.className = '';
    pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Pull up to load more...';
   }
  },
  onScrollMove: function () {
   if (this.y > 5 && !pullDownEl.className.match('flip')) {
    pullDownEl.className = 'flip';
    pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Release to refresh...';
    this.minScrollY = 0;
   } else if (this.y < 5 && pullDownEl.className.match('flip')) {
    pullDownEl.className = '';
    pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Pull down to refresh...';
    this.minScrollY = -pullDownOffset;
   } else if (this.y < (this.maxScrollY - 5) && !pullUpEl.className.match('flip')) {
    pullUpEl.className = 'flip';
    pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Release to refresh...';
    this.maxScrollY = this.maxScrollY;
   } else if (this.y > (this.maxScrollY + 5) && pullUpEl.className.match('flip')) {
    pullUpEl.className = '';
    pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Pull up to load more...';
    this.maxScrollY = pullUpOffset;
   }
  },
  onScrollEnd: function () {
   if (pullDownEl.className.match('flip')) {
    pullDownEl.className = 'loading';
    pullDownEl.querySelector('.pullDownLabel').innerHTML = 'Loading...';
    pullDownAction();
   } else if (pullUpEl.className.match('flip')) {
    pullUpEl.className = 'loading';
    pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Loading...';
    pullUpAction();
   }
  }
 });

页面无法弹回的原因在于:手指划出屏幕后touchend事件无法触发,回弹动画就无法执行。解决办法就是:当手指接近屏幕边缘的时候,手动触发动画方法。

在onScrollMove方法中插入判断代码:

onScrollMove: function () {
   if((this.y < this.maxScrollY) && (this.pointY < 1)){
    this.scrollTo(0, this.maxScrollY, 400);
    return;
   } else if (this.y > 0 && (this.pointY > window.innerHeight - 1)) {
    this.scrollTo(0, 0, 400);
    return;
   }

   ......
  }

下面解释一下这段代码的意思。

this.y是页面已经滚动的垂直距离,this.maxScrollY是最大垂直滚动距离,this.pointY手指当前的垂直坐标。

当this.y < this.maxScrollY,就是已经处于上拉的过程,当(this.y < this.maxScrollY) && (this.pointY < 1)时,处于上拉且手指已经触及屏幕边缘,这时候手动触发this.scrollTo(0, this.maxScrollY, 400),页面就开始回弹。

下拉过程也可以同理分析。

Javascript 相关文章推荐
js判断浏览器的比较全的代码
Feb 13 Javascript
JavaScript 常见对象类创建代码与优缺点分析
Dec 07 Javascript
JavaScript模板入门介绍
Sep 26 Javascript
html+css+js实现xp window界面及有关功能
Mar 26 Javascript
深入理解jQuery中live与bind方法的区别
Dec 18 Javascript
JQuery右键菜单插件ContextMenu使用指南
Dec 19 Javascript
jQuery中:checkbox选择器用法实例
Jan 03 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
详解angular2如何手动点击特定元素上的点击事件
Oct 16 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
新手快速上手webpack4打包工具的使用详解
Jan 28 Javascript
vue学习笔记之slot插槽基本用法实例分析
Feb 01 Javascript
javascript每日必学之条件分支
Feb 17 #Javascript
JavaScipt中栈的实现方法
Feb 17 #Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 #Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 #Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 #Javascript
Bootstrap入门书籍之(一)排版
Feb 17 #Javascript
Bootstrap入门书籍之(零)Bootstrap简介
Feb 17 #Javascript
You might like
做一个有下拉功能的留言版
2006/10/09 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
Python实现JSON反序列化类对象的示例
2018/01/31 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
Python容器类型公共方法总结
2020/08/19 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
PHP命令行与定时任务
2021/04/01 PHP