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 相关文章推荐
打造基于jQuery的高性能TreeView(asp.net)
Feb 23 Javascript
jquery入门—编写一个导航条(可伸缩)
Jan 07 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 Javascript
判定是否原生方法的JS代码
Nov 12 Javascript
Node.js与PHP、Python的字符处理性能对比
Jul 06 Javascript
AngularJS 中的Promise --- $q服务详解
Sep 14 Javascript
webpack实现热更新(实施同步刷新)
Jul 28 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
Oct 27 Javascript
Vue表单类的父子组件数据传递示例
May 03 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
Aug 26 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
详解jQuery选择器
2016/12/21 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
搭建vue开发环境
2018/07/19 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
express启用https使用小记
2019/05/21 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python中PIL安装简单教程
2016/04/21 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
大学毕业通用个人的求职信
2013/12/08 职场文书
优秀村官事迹材料
2014/01/10 职场文书
文体活动总结范文
2014/05/05 职场文书
高中学生自我评价范文
2014/09/23 职场文书
世界文化遗产导游词
2015/02/13 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
借条如何写
2015/05/26 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers