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 相关文章推荐
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
IE 上下滚动展示模仿Marquee机制
Dec 20 Javascript
让新消息在网页标题闪烁提示的jQuery代码
Nov 04 Javascript
ExtJS实现文件下载的方法实例
Nov 09 Javascript
基于Jquery实现焦点图淡出淡入效果
Nov 30 Javascript
Javascript实现图片不间断滚动的代码
Jun 22 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
vue自定义指令实现v-tap插件
Nov 03 Javascript
Node.JS文件系统解析实例详解
May 15 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
Apr 15 Javascript
关于vue的列表图片选中打钩操作
Sep 09 Javascript
在nuxt中使用路由重定向的实例
Nov 06 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 adodb连接mssql解决乱码问题
2009/06/12 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
JS与C#编码解码
2013/12/03 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
python正则表达式match和search用法实例
2015/03/26 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
警示教育活动总结
2014/05/05 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
2014年审计工作总结
2014/11/17 职场文书
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏