JavaScript实现前端分页控件


Posted in Javascript onApril 19, 2017

       现在web注重用户体验与交互性,ajax 提交数据的方式很早就流行了,它能够在不刷新网页的情况下局部刷新数据。前端分页多是用ajax请求数据(其他方式也有比如手动构造表单模拟提交事件等)。通过js将查询参数构造好发向后台,后台处理后以特定的格式返回,多为json,比较流行处理起来也很方便。当后台数据到达后,浏览器重新渲染界面当然也包括js分页控件,如果觉得每次绘制分页控件对前端性能有影响也可以不绘制,但实现起来相对麻烦。

       本人写的分页控件参考了其他网友的代码,链接忘了,控件接受四个参数或一个对象,其实是一样的对于后者只不过将四个参数放在一个对象中。pIndex:每次请求的页码,pSize:每次请求的页容量,container: 放分页控件的容器,fn:如何向服务器请求数据

       代码中主要用到了闭包,将上一次的请求信息保存起来,以备下次使用,虽然代码可以直接拿来用但是样式不是通用的,需要每次调样式还好样式比较简单。

function pagination(obj){
    /*pageIndex: index,
pageSize: size,
count:   count,  
container: container,
fn  :   fn
     */
    if(!obj||typeof obj!="object"){
        return false;
    }
    var pageIndex= obj.pageIndex||1,
      pageSize=obj.pageSize||10,
      count= obj.count||0,
      container= obj.container,
      callback=obj.fn||function(){};
    var pageCount =Math.ceil(count/pageSize); 
    if(pageCount==0){
        return false ;
    }  
    if(pageCount<pageIndex){
        return false;
    }
    /*事件绑定*/
    function bindEvent(){
        //上一页事件
        $(container).find(">ul>.pg-prev").unbind("click").bind("click",function(){
                if(pageIndex <=1){
                return false ;
                }
                if(typeof callback=="function"){
                pageIndex--;
                pageIndex = pageIndex<1?1:pageIndex;
                obj.pageIndex= pageIndex;
                callback(pageIndex);
                pagination(obj);
                }
                });
        //下一页事件
        $(container).find(">ul>.pg-next").unbind("click").bind("click",function(){
                if(pageIndex ==pageCount){
                return false ;
                }
                if(typeof callback=="function"){
                pageIndex++;
                pageIndex =pageIndex >pageCount?pageCount:pageIndex;
                obj.pageIndex= pageIndex;
                callback(pageIndex);
                pagination(obj);
                }
                });
        $(container).find(">ul>li:not(.pg-more):not(.pg-prev):not(.pg-next)").unbind("click").bind("click",function(){
                pageIndex= +$(this).html();
                pageIndex = isNaN(pageIndex)?1:pageIndex;
                obj.pageIndex= pageIndex;
                if(typeof callback=="function"){
                callback(pageIndex);
                pagination(obj);
                }
                });
    };

    /*画样式*/
    function printHead(){
        var html=[];
        html.push('<li class="pg-prev '+(pageIndex==1?"pg-disabled":"")+'">上一页</li>');
        return html.join("");
    }
    function printBody(){
        var html=[];
        var render=function(num,start){
            start=start||1;
            for(var i=start;i<=num;i++){
                html.push('<li class="'+(pageIndex==i?"pg-on":"")+'">'+i+'</li>');
            }
        }
        if(pageCount<=7){
            render(pageCount);
        }else{
            if(pageIndex <4){
                render(4);
                html.push('<li class="pg-more">...</li>');
                html.push('<li >'+pageCount+'</li>');    
            }else{
                html.push('<li >1</li>');  
                html.push('<li class="pg-more">...</li>');
                if(pageCount-pageIndex>3){
                    render(pageIndex+1,pageIndex-1);
                    html.push('<li class="pg-more">...</li>');
                    html.push('<li >'+pageCount+'</li>');
                }else{
                    render(pageCount,pageCount-3);
                }
            }
        }
        return html.join("");
    }
    function printTail(){
        var html=[];
        html.push('<li class="pg-next '+(pageIndex==pageCount?"pg-disabled":"")+'">下一页</li>');
        return html.join("");
    }
    function show(){
        container.innerHTML= '<ul>'+printHead()+printBody()+printTail()+'</ul>';
    }
    show();
    bindEvent();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
精通Javascript系列之数据类型 字符串
Jun 08 Javascript
js用typeof方法判断undefined类型
Jul 15 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
使用BootStrap实现用户登录界面UI
Aug 10 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
Oct 18 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
Jan 26 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 Javascript
vue动态生成dom并且自动绑定事件
Apr 19 #Javascript
Vue响应式原理详解
Apr 18 #Javascript
详解vue-router基本使用
Apr 18 #Javascript
Vue键盘事件用法总结
Apr 18 #Javascript
javascript实现日期三级联动下拉框选择菜单
Dec 03 #Javascript
jQuery加密密码到cookie的实现代码
Apr 18 #jQuery
微信小程序实战之自定义模态弹窗(8)
Apr 18 #Javascript
You might like
咖啡与水的关系
2021/03/03 冲泡冲煮
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
JS跨域问题详解
2014/11/25 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
200 行python 代码实现 2048 游戏
2018/01/12 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
在校生自我鉴定
2014/01/23 职场文书
办公室主任职责范本
2014/03/07 职场文书
教师节活动主持词
2014/04/02 职场文书
设计师求职信
2014/07/01 职场文书
大学生英文求职信范文
2015/03/19 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书