pc加载更多功能和移动端下拉刷新加载数据


Posted in Javascript onNovember 07, 2016

感觉一个人玩lol也没意思了,玩会手机,看到这个下拉刷新功能就写了这个demo!

这个demo写的比较随意,咱不能当做插件使用,基本思想是没问题的,要用就自己封装吧!

直接上代码分析下吧!

布局:

<ul class="show-area" style="min-height:100px;"></ul>
<button class='page-btn-nick' >加载更多</button>

就2行,只为实现功能,足矣!

js也不复杂,先定义2个变量,贯穿整个demo,进了不要全局变量,当然,封装的时候也可以当做闭包参数!

var m=0,n=2;//m:button点击次数 n:一次加载几条数据

请求:

$.ajax('paging.html')

这里我就写的本页面地址作为测试url。

下面请求成功后的处理就是重点了:

var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]}
     response=obj.developer;//假设请求到的数据是obj
     m++;
     var data='',elm='';
     if(m>(response.length%n==0?response.length/n:parseInt(response.length/n))){
      data=response.slice(n*(m-1));
      $('.page-btn-nick').html('没有更多了');
      $('.page-btn-nick').attr('disabled','disabled');
     }else{
      data=response.slice(n*(m-1),n*m);
     }

中心思想:

请求按钮点击一次,m+1,讲请求的数据拆分,只要需要的数据data;

data=response.slice(n*(m-1),n*m);

slice(s,e)函数获取请求到的数据的一部分,s:response的起始位置,e结尾位置(取不到e位置的元素),返回值是一个含头不含尾的数组。

这里由于开始默认加载n条数据,m已经加了一次1了,所以要s和e要对应的改变;

将数据动态加载到页面:

var len=data.length;
     for(var i= 0;i<len;i++){
      elm+="<li>"+data[i].name+"</li>";
     }
     $('.show-area').append(elm);

这里的append()要比html()更优!

我看有些developer是勇的html(),这样每加载一次,页面中的所有li将全部清空,在重新加载所有的li,感觉每次加载都要加载有点多余的数据,浪费啊……

看上面的数据就知道,我是讲每次请求的数据在slice()一次,在添加到页面。这要写我每加载一次,只把这次加载的数据append到ul的最后,以前的li并不会清空,这要加载的数据就是每次想要多加的必要数据,没有重复添加,感觉给力点吧!

后面我把请求数据的getData()作为button点击事件处理函数,同时放在判断后的下拉事件中,就可以实现点击按钮动态加载数据和下拉刷新加载数据了!

最后附上完整代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset='utf-8'>
 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
 <title>paging nick</title>
 <style>
 </style>
</head>
<body>
 <ul class="show-area" style="min-height:100px;"></ul>
 <button class='page-btn-nick' >加载更多</button>
 <script src='http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js'></script>
 <script>
  ;(function(){
   getData();
   var m=0,n=2;//m:button点击次数 n:一次加载几条数据
   $('.page-btn-nick').click(getData);
   function getData(){
    $.ajax('paging.html').then(function(response){//测试url写本页面
     var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]}
     response=obj.developer;//假设请求到的数据是obj
     m++;
     var data='',elm='';
     if(m>(response.length%n==0?response.length/n:parseInt(response.length/n))){
      data=response.slice(n*(m-1));
      $('.page-btn-nick').html('没有更多了');
      $('.page-btn-nick').attr('disabled','disabled');
     }else{
      data=response.slice(n*(m-1),n*m);
     }
     var len=data.length;
     for(var i= 0;i<len;i++){
      elm+="<li>"+data[i].name+"</li>";
     }
     $('.show-area').append(elm);
    },function(err){
     console.log(err);
    });
   }

   $(".show-area").on("touchstart", function(e) {
    e.preventDefault();
    startX = e.originalEvent.changedTouches[0].pageX,
      startY = e.originalEvent.changedTouches[0].pageY;
   });
   $(".show-area").on("touchmove", function(e) {
    e.preventDefault();
    moveEndX = e.originalEvent.changedTouches[0].pageX,
      moveEndY = e.originalEvent.changedTouches[0].pageY,
      X = moveEndX - startX,
      Y = moveEndY - startY;

    if ( Math.abs(X) > Math.abs(Y) && X > 0 ) {
     alert("left 2 right");
    }
    else if ( Math.abs(X) > Math.abs(Y) && X < 0 ) {
     alert("right 2 left");
    }
    else if ( Math.abs(Y) > Math.abs(X) && Y > 0) {
     alert("top 2 bottom");
     getData();
    }
    else if ( Math.abs(Y) > Math.abs(X) && Y < 0 ) {
     alert("bottom 2 top");
    }
    else{
     alert("just touch");
    }
   });
  }());
 </script>
</body>
</html>

可以直接复制完整代码,webstorm打开看看看,测试下吧!

移动端下拉事件就一笔带过了,可以参考我写的有关于移动化滑动事件的文章!

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

Javascript 相关文章推荐
通过js脚本复制网页上的一个表格的不错实现方法
Dec 29 Javascript
让ie6也支持websocket采用flash封装实现
Feb 18 Javascript
JS小游戏之极速快跑源码详解
Sep 25 Javascript
浅谈Javascript中substr和substring的区别
Sep 30 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
Sep 03 jQuery
vue移动端实现红包雨效果
Jun 23 Javascript
JavaScript new对象的四个过程实例浅析
Jul 31 Javascript
基于layui数据表格以及传数据的方式
Aug 19 Javascript
JS字典Dictionary类定义与用法示例
Feb 01 Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 Javascript
JS精确判断数据类型代码实例
Dec 18 Javascript
JavaScript实现表单验证功能
Dec 09 Javascript
jquery html5 视频播放控制代码
Nov 06 #Javascript
js无提示关闭浏览器窗口的两种方法分析
Nov 06 #Javascript
详解Angular.js的$q.defer()服务异步处理
Nov 06 #Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 #Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 #Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
Nov 16 #Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 #Javascript
You might like
php仿QQ验证码的实例分析
2013/07/01 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
Python xlwt模块使用代码实例
2020/06/10 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
函授毕业生自我鉴定
2013/11/06 职场文书
函授本科自我鉴定
2014/02/04 职场文书
暑期培训随笔感言
2014/03/10 职场文书
股权转让意向书
2014/04/01 职场文书
2015年科室工作总结
2015/04/10 职场文书
2015年司法局工作总结
2015/05/22 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏