IScroll5实现下拉刷新上拉加载的功能实例


Posted in Javascript onAugust 11, 2017

声明:虽然本文章为原创,但是很大部分参考了博客园博主MRxia的一篇iscroll的下拉刷新的实现方式,我个人把demo简化了一下。

实现效果:类似网易新闻加载新闻列表(好吧,我的只能算是基础版,如要添加动图或者css样式或者canvas效果请自行脑补)

外部引入js文件,必须是iscroll-probe.js,这点是很重要的,因为基础版的 iscroll.js 插件并不支持实例化的IScroll对象的on事件绑定,当然还是要引入jQuery简化一下开发

以下是全局的css样式,当然你也可以直接复制过去,前面的是默认的iscroll的demo的样式,后面的pulldown-tips样式是作为绝对定位,当用户下拉不超过40px时显示“下拉刷新”的提示,下拉刷新后会被隐藏起来

<style type="text/css"> 
* { 
  -webkit-box-sizing: border-box; 
  -moz-box-sizing: border-box; 
  box-sizing: border-box; 
} 
 
html { 
  -ms-touch-action: none; 
} 
 
body,ul,li { 
  padding: 0; 
  margin: 0; 
  border: 0; 
} 
 
body { 
  font-size: 12px; 
  font-family: ubuntu, helvetica, arial; 
  overflow: hidden; /* this is important to prevent the whole page to bounce */ 
} 
 
#header { 
  position: absolute; 
  z-index: 2; 
  top: 0; 
  left: 0; 
  width: 100%; 
  height: 45px; 
  line-height: 45px; 
  background: #CD235C; 
  padding: 0; 
  color: #eee; 
  font-size: 20px; 
  text-align: center; 
  font-weight: bold; 
} 
 
#footer { 
  position: absolute; 
  z-index: 2; 
  bottom: 0; 
  left: 0; 
  width: 100%; 
  height: 48px; 
  background: #444; 
  padding: 0; 
  border-top: 1px solid #444; 
} 
 
#wrapper { 
  position: absolute; 
  z-index: 1; 
  top: 45px; 
  bottom: 48px; 
  left: 0; 
  width: 100%; 
  background: #ccc; 
  overflow: hidden; 
} 
 
#scroller { 
  position: absolute; 
  z-index: 1; 
  -webkit-tap-highlight-color: rgba(0,0,0,0); 
  width: 100%; 
  -webkit-transform: translateZ(0); 
  -moz-transform: translateZ(0); 
  -ms-transform: translateZ(0); 
  -o-transform: translateZ(0); 
  transform: translateZ(0); 
  -webkit-touch-callout: none; 
  -webkit-user-select: none; 
  -moz-user-select: none; 
  -ms-user-select: none; 
  user-select: none; 
  -webkit-text-size-adjust: none; 
  -moz-text-size-adjust: none; 
  -ms-text-size-adjust: none; 
  -o-text-size-adjust: none; 
  text-size-adjust: none; 
} 
 
#scroller ul { 
  list-style: none; 
  padding: 0; 
  margin: 0; 
  width: 100%; 
  text-align: left; 
} 
 
#scroller li { 
  padding: 0 10px; 
  height: 40px; 
  line-height: 40px; 
  border-bottom: 1px solid #ccc; 
  border-top: 1px solid #fff; 
  background-color: #fafafa; 
  font-size: 14px; 
} 
#pullDown,#pullUp,.pulldown-tips{ 
  height:40px; 
  line-height:40px; 
  text-align:center; 
} 
  .pulldown-tips{ 
    position:absolute; 
    top:-40px; 
    left:0; 
    width:100%; 
  } 
 
</style>

html结构在默认demo的基础上在scoller里面添加刷新/加载数据提示

<body onload="load()"> 
<div id="header">iScroll</div> 
<div id="wrapper"> 
  <div id="scroller"> 
  <div id="pullDown" class=""><div class="pullDownLabel"></div></div> 
    <div class="pulldown-tips">下拉刷新</div> 
    <ul id="list"> 
      <li>Pretty row 1</li> 
      <li>Pretty row 2</li> 
      <li>Pretty row 3</li> 
      <li>Pretty row 4</li> 
      <li>Pretty row 5</li> 
      <li>Pretty row 6</li> 
      <li>Pretty row 7</li> 
      <li>Pretty row 8</li> 
      <li>Pretty row 9</li> 
      <li>Pretty row 10</li> 
      <li>Pretty row 11</li> 
      <li>Pretty row 12</li> 
      <li>Pretty row 13</li> 
      <li>Pretty row 14</li> 
      <li>Pretty row 15</li> 
      <li>Pretty row 16</li> 
      <li>Pretty row 17</li> 
      <li>Pretty row 18</li> 
      <li>Pretty row 19</li> 
      <li>Pretty row 20</li> 
    </ul> 
    <div id="pullUp" class=""> 
    <div class="pullUpLabel">加载更多</div> 
    </div> 
  </div> 
</div> 
 
<div id="footer"></div> 
 
</body>

js需要说明的是,这里的scroll事件当然不是原生dom的scroll事件,而是IScroll对象的滚动事件,类似touchmove事件,scrollEnd事件也类似touchend事件,在滚动结束后执行

<script type="text/javascript"> 
 
  function load () { 
    var myScroll, 
          pullDown = $("#pullDown"), 
          pullUp = $("#pullUp"), 
          pullDownLabel = $(".pullDownLabel"), 
          pullUpLabel = $(".pullUpLabel"), 
          container = $('#list'), 
          loadingStep = 0;//加载状态0默认,1显示加载状态,2执行加载数据,只有当为0时才能再次加载,这是防止过快拉动刷新 
 
      pullDown.hide(); 
      pullUp.hide(); 
 
      myScroll = new IScroll("#wrapper", { 
        scrollbars: true, 
        mouseWheel: false, 
        interactiveScrollbars: true, 
        shrinkScrollbars: 'scale', 
        fadeScrollbars: true, 
        scrollY:true, 
        probeType: 2, 
        bindToWrapper:true 
      }); 
      myScroll.on("scroll",function(){ 
        if(loadingStep == 0 && !pullDown.attr("class").match('refresh|loading') && !pullUp.attr("class").match('refresh')){ 
          if(this.y > 40){//下拉刷新操作 
            $(".pulldown-tips").hide(); 
            pullDown.addClass("refresh").show(); 
            pullDownLabel.text("松手刷新数据"); 
            loadingStep = 1; 
            myScroll.refresh(); 
          }else if(this.y < (this.maxScrollY - 14)){//上拉加载更多 
            pullUp.addClass("refresh").show(); 
            pullUpLabel.text("正在载入"); 
            loadingStep = 1; 
            pullUpAction(); 
          } 
        } 
      }); 
      myScroll.on("scrollEnd",function(){ 
        if(loadingStep == 1){ 
          if( pullDown.attr("class").match("refresh") ){//下拉刷新操作 
            pullDown.removeClass("refresh").addClass("loading"); 
            pullDownLabel.text("正在刷新"); 
            loadingStep = 2; 
            pullDownAction(); 
          } 
        } 
      }); 
 
    function pullDownAction(){ 
      setTimeout(function(){ 
        var li, i; 
        for (i = 0,li = ""; i < 3; i++) { 
          li += "<li>" + "new Add " + new Date().toLocaleString() + " !" + "</li>"; 
        } 
        container.prepend(li); 
        pullDown.attr('class','').hide(); 
        myScroll.refresh(); 
        loadingStep = 0; 
        $(".pulldown-tips").show(); 
      },1000); 
    } 
    function pullUpAction(){ 
      setTimeout(function(){ 
        var li, i; 
        for (i = 0,li = ""; i < 3; i++) { 
          li += "<li>" + "new Add " + new Date().toLocaleString() + " !" + "</li>"; 
        } 
        container.append(li); 
        pullUp.attr('class','').hide(); 
        myScroll.refresh(); 
        loadingStep = 0; 
      },1000); 
    } 
 
    document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); 
    } 
 
 
</script>

如有出错,欢迎指正  PS:测试环境在firefox的响应式开发环境下运行

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript之卸载鼠标事件的代码
May 14 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
Dec 19 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
举例讲解如何判断JavaScript中对象的类型
Apr 22 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
Vue中插入HTML代码的方法
Sep 21 Javascript
JavaScript对象拷贝与赋值操作实例分析
Dec 10 Javascript
node.js中module模块的功能理解与用法实例分析
Feb 14 Javascript
Vue+tracking.js 实现前端人脸检测功能
Apr 16 Javascript
实现AJAX异步调用和局部刷新的基本步骤
Mar 17 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 #Javascript
原生js 封装get ,post, delete 请求的实例
Aug 11 #Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 #Javascript
JS非空验证及邮箱验证的实例
Aug 11 #Javascript
vue如何获取点击事件源的方法
Aug 10 #Javascript
Vue单文件组件基础模板小结
Aug 10 #Javascript
基于JavaScript实现淘宝商品广告效果
Aug 10 #Javascript
You might like
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Django的Modelforms用法简介
2019/07/27 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
python Gabor滤波器讲解
2020/10/26 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
学校光盘行动倡议书
2015/04/28 职场文书
卡特教练观后感
2015/06/08 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
python正则表达式re.search()的基本使用教程
2021/05/21 Python
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python