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 相关文章推荐
一个选择最快的服务器转向代码
Apr 27 Javascript
一个JQuery操作Table的代码分享
Mar 30 Javascript
js使用eval解析json实例与注意事项分享
Jan 18 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
jfinal与bootstrap的登录跳转实战演习
Sep 22 Javascript
深入探讨前端框架react
Dec 09 Javascript
Javascript删除指定元素节点的方法
Jun 21 Javascript
修改Jquery Dialog 位置的实现方法
Aug 26 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
Jan 05 Javascript
微信小程序模板(template)使用详解
Jan 31 Javascript
vue select组件的使用与禁用实现代码
Apr 10 Javascript
vue.js 实现输入框动态添加功能
Jun 25 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
Python中Threading用法详解
2017/12/27 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
用 Python 制作地球仪的方法
2020/04/24 Python
详解Python中第三方库Faker
2020/09/25 Python
web页面录屏实现
2019/02/12 HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
StringBuilder和String的区别
2015/05/18 面试题
分层教学实施方案
2014/03/19 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
维稳工作承诺书
2015/01/20 职场文书
检讨书范文
2015/01/27 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
公司放假通知范文
2015/04/14 职场文书