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 相关文章推荐
IE与FireFox中的childNodes区别
Oct 20 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
jQuery中ajax的load()与post()方法实例详解
Jan 05 Javascript
jQuery版本升级踩坑大全
Jan 12 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
JavaScript使用Range调色及透明度实例
Sep 25 Javascript
Vue计算属性的学习笔记
Mar 22 Javascript
Vue.js 中的 $watch使用方法
May 25 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
微信小程序select下拉框实现效果
May 15 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Vue计算属性的使用
2017/08/04 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
python3中for循环踩过的坑记录
2020/12/14 Python
python 实现客户端与服务端的通信
2020/12/23 Python
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
教师自荐信范文
2013/12/09 职场文书
运动会解说词100字
2014/01/31 职场文书
高一新生军训感言
2014/03/02 职场文书
公司员工安全协议书
2014/11/21 职场文书
Python实现双向链表
2022/05/25 Python