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 文件的同步加载与异步加载实现原理
Dec 13 Javascript
struts2+jquery+json实现异步加载数据(自写)
Jun 24 Javascript
js 获取input点选按钮的值的方法
Apr 14 Javascript
微信小程序 页面传参实例详解
Nov 16 Javascript
javascript 闭包详解及简单实例应用
Dec 31 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 Javascript
Canvas实现微信红包照片效果
Aug 21 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
Feb 08 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 jQuery
微信小程序访问豆瓣电影api的实现方法
Mar 31 Javascript
简单了解three.js 着色器材质
Aug 03 Javascript
vue iview 隐藏Table组件里的某一列操作
Nov 13 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框架codeigniter中如何使用框架的session
2013/06/24 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
python实现按行分割文件
2019/07/22 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
python3 logging日志封装实例
2020/04/08 Python
keras 多gpu并行运行案例
2020/06/10 Python
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
逻辑链路控制协议
2016/10/01 面试题
请说出以下代码输出什么
2013/08/30 面试题
大学自我鉴定范文
2013/12/26 职场文书
物业门卫岗位职责
2013/12/28 职场文书
国家励志奖学金获奖感言
2014/01/09 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android