JQuery插件iScroll实现下拉刷新,滚动翻页特效


Posted in Javascript onJune 22, 2014

JQuery插件:iScroll

页面布局:

<div id="wrapper">
  <div id="scroller">
   <div id="pullDown">
    <span class="pullDownIcon"></span><span class="pullDownLabel">下拉刷新...</span>
   </div>
   <ul id="thelist">
    <li>
     <img src="img/page1_img1.jpg" />
    </li>
    <li>
     <img src="img/page1_img2.jpg" />
    </li>
    <li>
     <img src="img/page1_img3.jpg" />
    </li>
    <li>
     <img src="img/page1_img1.jpg" />
    </li>
    <li>
     <img src="img/page1_img2.jpg" />
    </li>
    <li>
     <img src="img/page1_img3.jpg" />
    </li>
   </ul>
   <div id="pullUp">
    <span class="pullUpIcon"></span><span class="pullUpLabel">上拉加载更多...</span>
   </div>
  </div>

翻页,是通过ajax请求,把页码传入一般处理程序,在一般处理程序中获得分页后的数据返回json数组对象。

下拉刷新:

/**
  * 下拉刷新 (自定义实现此方法)
  * myScroll.refresh(); // 数据加载完成后,调用界面更新方法
  */
  function pullDownAction() {
   setTimeout(function () { 
    var el, li, i;
    el = document.getElementById('thelist');
    //==========================================
    $.ajax({
     type: "GET",
     url: "LoadMore.ashx",
     data: { page: generatedCount },
     dataType: "json",
     success: function (data) {
      var json = data;
      $(json).each(function () {
       li = document.createElement('li');
       // li.innerText = 'Generated row ' + (++generatedCount);
       li.innerHTML = '<img src="' + this.src + '"/>';
       el.insertBefore(li, el.childNodes[0]);
      })
     }
    });
    myScroll.refresh(); //数据加载完成后,调用界面更新方法  Remember to refresh when contents are loaded (ie: on ajax completion)
   }, 1000);  // <-- Simulate network congestion, remove setTimeout from production!
  }

上拉刷新

function pullUpAction() {
   setTimeout(function () {  
    var el, li, i;
    el = document.getElementById('thelist');
    //==========================================
    $.ajax({
     type: "GET",
     url: "LoadMore.ashx",
     data: { page: generatedCount },
     dataType: "json",
     success: function (data) {
      var json = data;
      $(json).each(function () {
       li = document.createElement('li');
       //  li.innerText = 'Generated row ' + (++generatedCount);
       li.innerHTML = '<img src="' + this.src + '"/>;     
       el.insertBefore(li, el.childNodes[0]);
      })
     }
    });
    //============================================
    myScroll.refresh(); // 数据加载完成后,调用界面更新方法 Remember to refresh when contents are loaded (ie: on ajax completion)
   }, 1000); // <-- Simulate network congestion, remove setTimeout from production!
  }

初始化

/**
  * 初始化iScroll控件
  */
  function loaded() {
   pullDownEl = document.getElementById('pullDown');
   pullDownOffset = pullDownEl.offsetHeight;
   pullUpEl = document.getElementById('pullUp');
   pullUpOffset = pullUpEl.offsetHeight;
   myScroll = new iScroll('wrapper', {
    scrollbarClass: 'myScrollbar', /* 重要样式 */
    useTransition: false,
    topOffset: pullDownOffset,
    onRefresh: function () {
     if (pullDownEl.className.match('loading')) {
      pullDownEl.className = '';
      pullDownEl.querySelector('.pullDownLabel').innerHTML = '下拉刷新...';
     } else if (pullUpEl.className.match('loading')) {
      pullUpEl.className = '';
      pullUpEl.querySelector('.pullUpLabel').innerHTML = '上拉加载更多...';
     }
    },
    onScrollMove: function () {
     if (this.y > 5 && !pullDownEl.className.match('flip')) {
      pullDownEl.className = 'flip';
      pullDownEl.querySelector('.pullDownLabel').innerHTML = '松手开始更新...';
      this.minScrollY = 0;
     } else if (this.y < 5 && pullDownEl.className.match('flip')) {
      pullDownEl.className = '';
      pullDownEl.querySelector('.pullDownLabel').innerHTML = '下拉刷新...';
      this.minScrollY = -pullDownOffset;
     } else if (this.y < (this.maxScrollY - 5) && !pullUpEl.className.match('flip')) {
      pullUpEl.className = 'flip';
      pullUpEl.querySelector('.pullUpLabel').innerHTML = '松手开始更新...';
      this.maxScrollY = this.maxScrollY;
     } else if (this.y > (this.maxScrollY + 5) && pullUpEl.className.match('flip')) {
      pullUpEl.className = '';
      pullUpEl.querySelector('.pullUpLabel').innerHTML = '上拉加载更多...';
      this.maxScrollY = pullUpOffset;
     }
    },
    onScrollEnd: function () {
     if (pullDownEl.className.match('flip')) {
      pullDownEl.className = 'loading';
      pullDownEl.querySelector('.pullDownLabel').innerHTML = '加载中...';
      pullDownAction(); // Execute custom function (ajax call?)
     } else if (pullUpEl.className.match('flip')) {
      pullUpEl.className = 'loading';
      pullUpEl.querySelector('.pullUpLabel').innerHTML = '加载中...';
      pullUpAction(); // Execute custom function (ajax call?)
     }
    }
   });
   setTimeout(function () { document.getElementById('wrapper').style.left = '0'; }, 800);
  }
  //初始化绑定iScroll控件 
  document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
  document.addEventListener('DOMContentLoaded', loaded, false);
Javascript 相关文章推荐
Js+XML 操作
Sep 20 Javascript
javascript 流畅动画实现原理
Sep 08 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
js将控件隐藏的方法及display属性介绍
Jul 04 Javascript
js中string转int把String类型转化成int类型
Aug 13 Javascript
解决jquery版本冲突的有效方法
Sep 02 Javascript
详解react如何在组件中获取路由参数
Jun 15 Javascript
微信小程序版翻牌小游戏
Jan 26 Javascript
如何实现一个webpack模块解析器
Oct 24 Javascript
浅析Vue.js 中的条件渲染指令
Nov 19 Javascript
Window.Open如何在同一个标签页打开
Jun 20 #Javascript
JSON.parse()和JSON.stringify()使用介绍
Jun 20 #Javascript
Js实现手机发送验证码时按钮延迟操作
Jun 20 #Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
Jun 20 #Javascript
js处理php输出时间戳对不上号的解决方法
Jun 20 #Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 #Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
Jun 20 #Javascript
You might like
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
Node.js模块加载详解
2014/08/16 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
python复制文件代码实现
2013/12/23 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
python对象与json相互转换的方法
2019/05/07 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
小学教师学期末自我评价
2013/09/25 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
2015学校年度工作总结
2015/05/11 职场文书
作文之亲情600字
2019/09/23 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android