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 相关文章推荐
IE6弹出“已终止操作”的解决办法
Nov 27 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
Mar 19 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
使用jQuery仿苹果官网焦点图特效
Dec 23 Javascript
jQuery $.each遍历对象、数组用法实例
Apr 16 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
Jun 24 Javascript
jquery实现表单获取短信验证码代码
Mar 13 Javascript
React通过父组件传递类名给子组件的实现方法
Nov 13 Javascript
代码详解Vuejs响应式原理
Dec 20 Javascript
JS使用队列对数组排列,基数排序算法示例
Mar 02 Javascript
JS实现滑动拼图验证功能完整示例
Mar 29 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 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 ci框架验证码实例分析
2013/06/26 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
铭立家具面试题
2012/12/06 面试题
几个判断型的面试题
2012/07/03 面试题
古汉语文学求职信范文
2014/03/16 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2014年营销工作总结
2014/11/22 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
钱学森观后感
2015/06/04 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js