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对象及属性
Feb 13 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
Nov 26 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
Apr 23 Javascript
理解Javascript_14_函数形式参数与arguments
Oct 20 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
Oct 28 Javascript
关于AngularJs数据的本地存储详解
Jan 20 Javascript
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
Apr 04 Javascript
JS阻止事件冒泡的方法详解
Aug 26 Javascript
javascript数组的定义及操作实例
Nov 10 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
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
JavaScript Date对象使用总结
2009/05/14 Javascript
JavaScript中null与undefined分析
2009/07/25 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
PyQt5每天必学之工具提示功能
2018/04/19 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Python 如何展开嵌套的序列
2020/08/01 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
经理管理专业自荐信范文
2013/12/31 职场文书
上班上网检讨书
2014/01/29 职场文书
终止劳动合同协议书
2014/04/14 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
详解Java实现数据结构之并查集
2021/06/23 Java/Android