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 相关文章推荐
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 Javascript
javascript学习随笔(使用window和frame)的技巧
Mar 08 Javascript
jquery UI 1.72 之datepicker
Dec 29 Javascript
jquery手风琴特效插件
Feb 04 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
AngularJS中的表单简单入门
Jul 28 Javascript
JS基于贪心算法解决背包问题示例
Nov 27 Javascript
原生JS实现的自动轮播图功能详解
Dec 28 Javascript
AjaxFileUpload.js实现异步上传文件功能
Apr 19 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
May 28 Javascript
Vue作用域插槽实现方法及作用详解
Jul 08 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
PHP 配置后台登录以及模板引入
2017/01/24 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
jQuery使用手册之 事件处理
2007/03/24 Javascript
js查找父节点的简单方法
2008/06/28 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
小程序实现留言板
2018/11/02 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
Python selenium如何设置等待时间
2016/09/15 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
Python新手学习函数默认参数设置
2020/06/03 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
python switch 实现多分支选择功能
2020/12/21 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
华为python面试题
2016/05/03 面试题
销售文员岗位职责
2013/11/29 职场文书
单位门卫岗位职责
2013/12/20 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
班级活动总结格式
2014/08/30 职场文书
慰问信范文
2015/02/14 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
初中班长竞选稿
2015/11/20 职场文书
Java完整实现记事本代码
2022/06/16 Java/Android
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技