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 日期时间函数(经典+完善+实用)
May 27 Javascript
jQuery 使用手册(六)
Sep 23 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
Oct 19 Javascript
js鼠标及对象坐标控制属性详细解析
Dec 14 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
Apr 20 Javascript
webpack配置之后端渲染详解
Oct 26 Javascript
ES6入门教程之Array.from()方法
Mar 23 Javascript
vue.js高德地图实现热点图代码实例
Apr 18 Javascript
uni-app 自定义底部导航栏的实现
Dec 11 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
桌面中心(一)创建数据库
2006/10/09 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
php语法检查的方法总结
2019/01/21 PHP
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
js选项卡的实现方法
2015/02/09 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
element中的$confirm的使用
2020/04/26 Javascript
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
python简单区块链模拟详解
2019/07/03 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
中医药大学市场营销专业自荐信
2013/09/29 职场文书
银行实习自我鉴定
2013/10/12 职场文书
政府个人对照检查材料
2014/08/28 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技