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 相关文章推荐
一个JS翻页效果
Jul 23 Javascript
javascript replace方法与正则表达式
Feb 19 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
Sep 09 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
Avalonjs双向数据绑定与监听的实例代码
Jun 23 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
Jul 10 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
浅谈ECMAScript 中的Array类型
Jun 10 Javascript
javascript 易错知识点实例小结
Apr 25 Javascript
webpack+vue.js构建前端工程化的详细教程
May 10 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中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
动态表格Table类的实现
2009/08/26 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
快速查找Python安装路径方法
2020/02/06 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
python ETL工具 pyetl
2020/06/07 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
假面舞会策划方案
2014/05/29 职场文书
九九重阳节标语
2014/10/07 职场文书
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS