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类 from qq
Nov 13 Javascript
javascript实现的listview效果
Apr 28 Javascript
javascript 面向对象编程基础:继承
Aug 21 Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
jQuery图片滚动图片的效果(另类实现)
Jun 02 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
Aug 05 Javascript
在网页中插入百度地图的步骤详解
Dec 02 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
Vue-Router基础学习笔记(小结)
Oct 15 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
layer iframe 设置关闭按钮的方法
Sep 12 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 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制作新闻系统的思路
2006/10/09 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
2013/07/01 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
浅谈python日志的配置文件路径问题
2018/04/28 Python
简单了解python变量的作用域
2019/07/30 Python
python如何把字符串类型list转换成list
2020/02/18 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
网络书店创业计划书
2014/02/07 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
先进集体申报材料
2014/12/25 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
会计专业自荐信范文
2019/05/22 职场文书
创业计划书之寿司
2019/07/19 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
Java spring定时任务详解
2021/10/05 Java/Android
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技