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 相关文章推荐
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
用jQuery toggleClass 实现鼠标移上变色
May 14 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
Aug 21 Javascript
jquery拖拽排序简单实现方法(效果增强版)
Feb 16 Javascript
jQuery绑定事件的几种实现方式
May 09 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
Nov 09 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
JS实现仿微信支付弹窗功能
Jun 25 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 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
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
《故乡》教学反思
2014/04/10 职场文书
爱国主义演讲稿
2014/05/07 职场文书
财务人员担保书
2014/05/13 职场文书
战友聚会策划方案
2014/06/13 职场文书
营业用房租赁协议书
2014/11/26 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
Docker安装MySql8并远程访问的实现
2022/07/07 Servers