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 和 CSS 实现脚注(Footnote)效果
Sep 09 Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 Javascript
JavaScript限定复选框的选择个数示例代码
Aug 25 Javascript
javascript ready和load事件的区别示例介绍
Aug 30 Javascript
jQuery对html元素取值与赋值的方法
Nov 20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
May 28 Javascript
用js实现before和after伪类的样式修改的示例代码
Sep 07 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
微信小程序使用map组件实现解析经纬度功能示例
Jan 22 Javascript
微信网页登录逻辑与实现方法
Apr 29 Javascript
基于JavaScript获取url参数2种方法
Apr 17 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 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编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
Python验证码识别处理实例
2015/12/28 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
python requests 使用快速入门
2017/08/31 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python各层级目录下import方法代码实例
2020/01/20 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
单位消防安全制度
2014/01/12 职场文书
如何写求职信
2014/05/24 职场文书
树转促学习心得体会
2014/09/10 职场文书
2015毕业寄语大全
2015/02/26 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
MySQL分区表实现按月份归类
2021/11/01 MySQL