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和jquery修改a标签的href属性
Dec 16 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
详解js中class的多种函数封装方法
Jan 03 Javascript
基于socket.io+express实现多房间聊天
Mar 17 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 jQuery
webpack4.x打包过程详解
Jul 18 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
Feb 02 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
Layui事件监听的实现(表单和数据表格)
Oct 17 Javascript
vue实现pdf文档在线预览功能
Nov 26 Javascript
node.js中npm包管理工具用法分析
Feb 14 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扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
Python中subprocess的简单使用示例
2015/07/28 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
如何理解Python中的变量
2020/06/01 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
Python socket服务常用操作代码实例
2020/06/22 Python
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
亮化工程实施方案
2014/03/17 职场文书
公司委托书范本
2014/04/04 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
管理标语大全
2014/06/24 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Redis基本数据类型List常用操作命令
2022/06/01 Redis