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 相关文章推荐
JQUERY的属性选择符和自定义选择符使用方法(二)
Apr 07 Javascript
JSON辅助格式化处理方法
Mar 26 Javascript
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
浅谈javascript原型链与继承
Jul 13 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
Aug 07 Javascript
Angularjs中UI Router全攻略
Jan 29 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
vue实现在进行增删改操作后刷新页面
Aug 05 Javascript
Postman无法正常返回结果问题解决
Aug 28 Javascript
Nuxt的路由动画效果案例
Nov 06 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调用数据库的存贮过程
2006/10/09 PHP
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
js实现时钟定时器
2020/03/26 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
vue实现登录功能
2020/12/31 Vue.js
Python正则表达式常用函数总结
2017/06/24 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
毕业自我评价
2014/02/05 职场文书
保密承诺书范文
2014/03/27 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
2015年国培研修感言
2015/08/01 职场文书