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 在firebug调试时用console.log的方法
May 10 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
js中哈希表的几种用法总结
Jan 28 Javascript
Node.js的特点和应用场景介绍
Nov 04 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
文件上传插件SWFUpload的使用指南
Nov 29 Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 Javascript
JavaScript字符串检索字符的方法
Jun 23 Javascript
node基于async/await对mysql进行封装
Jun 20 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 Javascript
JS监听组合按键思路及实现过程
Apr 17 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
Protoss兵种介绍
2020/03/14 星际争霸
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
Json解析的方法小结
2016/06/22 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
整理Python中的赋值运算符
2015/05/13 Python
深入理解Python中字典的键的使用
2015/08/19 Python
Python解惑之True和False详解
2017/04/24 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
编码实现字符串转整型的函数
2012/06/02 面试题
安全负责人任命书
2014/06/06 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
经费申请报告范文
2015/05/18 职场文书
2016年母亲节寄语
2015/12/04 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB