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 相关文章推荐
JavaScript中URL编码函数代码
Jan 11 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
Jan 13 Javascript
两种常用的javascript数组去重方法思路及代码
Mar 26 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
Nov 22 Javascript
jquery中$(#form :input)与$(#form input)的区别
Aug 18 Javascript
详解JavaScript逻辑And运算符
Dec 04 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
Jan 21 Javascript
小程序server请求微信服务器超时的解决方法
May 21 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 Javascript
JavaScript实现页面高亮操作提示和蒙板
Jan 04 Javascript
原生JavaScript实现换肤
Feb 19 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
javascript实现手机震动API代码
2015/08/05 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
西式婚礼证婚词
2014/01/12 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
批评与自我批评范文
2014/10/15 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
创业计划书之废品回收
2019/09/26 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技