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 数组排序函数
Aug 20 Javascript
ModelDialog JavaScript模态对话框类代码
Apr 17 Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 Javascript
使用 Node.js 做 Function Test实现方法
Oct 25 Javascript
利用Angular.js编写公共提示模块的方法教程
May 28 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 Javascript
基于React Native 0.52实现轮播图效果
Aug 25 Javascript
element-ui 本地化使用教程详解
Oct 28 Javascript
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
Nov 02 Javascript
js实现模拟购物商城案例
May 18 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
python中os操作文件及文件路径实例汇总
2015/01/15 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
自定义django admin model表单提交的例子
2019/08/23 Python
python获取Linux发行版名称
2019/08/30 Python
python 实现return返回多个值
2019/11/19 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
如何用python写个模板引擎
2021/01/14 Python
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
教师反腐倡廉演讲稿
2014/09/03 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
旷工检讨书1000字
2015/01/01 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
管理失职检讨书范文
2015/05/05 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
导游词之峨眉山
2019/12/16 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python