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 相关文章推荐
node.js中的fs.fchmod方法使用说明
Dec 16 Javascript
javascript 获取浏览器版本
Jan 21 Javascript
JS动态添加iframe的代码
Sep 14 Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
手把手教你搭建ES6的开发运行环境
Jul 11 Javascript
JavaScript中的高级函数
Jan 04 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
Aug 09 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
Aug 29 Javascript
写gulp遇到的ES6问题详解
Dec 03 Javascript
jquery插件开发模式实例详解
Jul 20 jQuery
layui在form表单页面通过Validform加入简单验证的方法
Sep 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
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
JS实现星星海特效
2019/12/24 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
Python中模块与包有相同名字的处理方法
2017/05/05 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python实现交并比IOU教程
2020/04/16 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
信息学院毕业生自荐信范文
2014/03/04 职场文书
闭幕式主持词
2014/04/02 职场文书
工程售后服务方案
2014/06/08 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书