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

 更新时间:2016年02月18日 08:46:20   作者:那时候的我  
本文给大家分享的是在IOS浏览器中使用iscroll.js的上拉下拉刷新时当手指划出屏幕后无法回弹的解决方法,希望对大家能够有所帮助。

使用过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),页面就开始回弹。

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

相关文章

  • JS小游戏之仙剑翻牌源码详解

    JS小游戏之仙剑翻牌源码详解

    这篇文章主要介绍了JS小游戏之仙剑翻牌源码,是一款比较经典的卡牌类游戏,对于javascript游戏设计有不错的借鉴价值,需要的朋友可以参考下
    2014-09-09
  • 可以用来调试JavaScript错误的解决方案

    可以用来调试JavaScript错误的解决方案

    我们在书写js的过程中,经常会出现一些js错误,对于如果找出错误的解决方法就是关键,下面的文章就是相关的调试方法。
    2010-08-08
  • js中有关IE版本检测

    js中有关IE版本检测

    javascript中经常用到IE版本的判定,实现特定需求的代码。检测浏览器虽然不是一个什么好的做法,但是有时候还是很必要的
    2012-01-01
  • js判断文本框输入的内容是否为数字

    js判断文本框输入的内容是否为数字

    这篇文章主要介绍了js判断文本框输入的内容是否为数字,本文为大家分享了验证文本框中的内容是否为数字的方法,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 微信小程序图片上传组件实现图片拖拽排序

    微信小程序图片上传组件实现图片拖拽排序

    最近在写小程序过程中遇到一个拖拽排序需求,上网一顿搜索未果,遂自行实现,下面这篇文章主要给大家介绍了关于微信小程序图片上传组件实现图片拖拽排序的相关资料,需要的朋友可以参考下
    2022-03-03
  • 纯 JS 实现放大缩小拖拽功能(完整代码)

    纯 JS 实现放大缩小拖拽功能(完整代码)

    这篇文章主要介绍了纯js实现放大缩小拖拽功能,文中给大家提到了在开发过程中遇到的一些问题及解决方法,需要的朋友可以参考下
    2019-11-11
  • Bootstrap教程JS插件弹出框学习笔记分享

    Bootstrap教程JS插件弹出框学习笔记分享

    这篇文章主要为大家分享了Bootstrap教程JS插件弹出框学习笔记,为大家详细介绍Bootstrap弹出框的使用方法,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • JavaScript通过元素的ID和name设置样式

    JavaScript通过元素的ID和name设置样式

    这篇文章主要介绍了JavaScript通过元素的ID和name设置其样式,下面有个不错的示例,感兴趣的朋友可以测试下
    2014-07-07
  • JS监听滚动和id自动定位滚动

    JS监听滚动和id自动定位滚动

    这篇文章主要为大家详细介绍了JS监听滚动和id自动定位滚动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • javascript下汉字和Unicode编码互转代码

    javascript下汉字和Unicode编码互转代码

    这个是就是把汉字和Unicode编码互转的javascript代码,也是从网上找到了,也许有人用得着!!
    2010-10-10

最新评论