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 相关文章推荐
JavaScript实现表格排序方法
Jun 14 Javascript
仿百度联盟对联广告实现代码
Aug 30 Javascript
jquery获取当前日期的方法
Jan 14 Javascript
深入探寻seajs的模块化与加载方式
Apr 14 Javascript
JavaScript数组和循环详解
Apr 27 Javascript
AngularJS数据源的多种获取方式汇总
Feb 02 Javascript
轻松掌握JavaScript代理模式
Aug 26 Javascript
jQuery使用方法
Feb 04 Javascript
Angularjs自定义指令Directive详解
May 27 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
Oct 18 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
Dec 24 Javascript
layui中的switch开关实现方法
Sep 03 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
10条PHP编程习惯助你找工作
2008/09/29 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
jQuery each()小议
2010/03/18 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
在python中实现对list求和及求积
2018/11/14 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
日语专业毕业生自荐信
2013/11/11 职场文书
kfc实习自我鉴定
2013/12/14 职场文书
职称评定自我鉴定
2014/03/18 职场文书
业务内勤岗位职责
2014/04/30 职场文书
民主生活会汇报材料
2014/12/15 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
党小组考察意见
2015/06/02 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
MySQL中一条update语句是如何执行的
2022/03/16 MySQL