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 相关文章推荐
Textbox控件注册回车事件及触发按钮提交事件具体实现
Mar 04 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
Jan 02 Javascript
JS中表单的使用小结
Jan 11 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
May 31 Javascript
Thinkjs3新手入门之添加一个新的页面
Dec 06 Javascript
JavaScript剩余操作符Rest Operator详解
Jul 20 Javascript
Vue filter 过滤当前时间 实现实时更新效果
Dec 20 Javascript
Vue.js实现立体计算器
Feb 22 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
JavaScript实现显示和隐藏图片
Apr 29 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php获得当前的脚本网址
2007/12/10 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
python使用arp欺骗伪造网关的方法
2015/04/24 Python
Django中的Model操作表的实现
2018/07/24 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
Numpy 多维数据数组的实现
2020/06/18 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
Python request中文乱码问题解决方案
2020/09/17 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
法国家具及室内配件店:home24
2017/01/21 全球购物
学校志愿者活动总结
2014/06/27 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
机动车交通事故协议书
2015/01/29 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
庆七一晚会主持词
2015/06/30 职场文书
六一儿童节新闻稿
2015/07/17 职场文书