关于jQurey的分页createPage

用了jQurey的分页,不过他的分页本身有问题,就是他没写分页如何去更新总页数,比如我一个页面有tab需要切换两个table,用的一个分页组件,或者请求接口去更新总条数数据,问题很大

代码

js

(function ($) {
    var zp = {
        init: function (obj, pageinit) {
            return (function () {
                zp.addhtml(obj, pageinit);
                zp.bindEvent(obj, pageinit);
            }());
        },
        addhtml: function (obj, pageinit) {
            return (function () {
                obj.empty();
                /*上一页*/
                if (pageinit.current > 1) {
                    obj.append('<a href="javascript:;" class="prebtn">上一页</a>');
                } else {
                    obj.remove('.prevPage');
                    obj.append('<span class="disabled">上一页</span>');
                }
                /*中间页*/
                if (pageinit.current > 4 && pageinit.pageNum > 4) {
                    obj.append('<a href="javascript:;" class="zxfPagenum">' + 1 + '</a>');
                    obj.append('<a href="javascript:;" class="zxfPagenum">' + 2 + '</a>');
                    obj.append('<span>...</span>');
                }
                if (pageinit.current > 4 && pageinit.current <= pageinit.pageNum - 5) {
                    var start = pageinit.current - 2, end = pageinit.current + 2;
                } else if (pageinit.current > 4 && pageinit.current > pageinit.pageNum - 5) {
                    var start = pageinit.pageNum - 4, end = pageinit.pageNum;
                } else {
                    var start = 1, end = 9;
                }
                for (; start <= end; start++) {
                    if (start <= pageinit.pageNum && start >= 1) {
                        if (start == pageinit.current) {
                            obj.append('<span class="current">' + start + '</span>');
                        } else if (start == pageinit.current + 1) {
                            obj.append('<a href="javascript:;" class="zxfPagenum nextpage">' + start + '</a>');
                        } else {
                            obj.append('<a href="javascript:;" class="zxfPagenum">' + start + '</a>');
                        }
                    }
                }
                if (end < pageinit.pageNum) {
                    obj.append('<span>...</span>');
                }
                /*下一页*/
                if (pageinit.current >= pageinit.pageNum) {
                    obj.remove('.nextbtn');
                    obj.append('<span class="disabled">下一页</span>');
                } else {
                    obj.append('<a href="javascript:;" class="nextbtn">下一页</a>');
                }
                /*尾部*/
                obj.append('<span>' + '共' + '<b>' + pageinit.pageNum + '</b>' + '页,' + '</span>');
                obj.append('<span>' + '到第' + '<input type="number" min="1" max="' + pageinit.pageNum + '" class="zxfinput" value="1"/>' + '页' + '</span>');
                obj.append('<span class="zxfokbtn">' + '确定' + '</span>');
            }());
        },
        bindEvent: function (obj, pageinit) {
            return (function () {
                obj.on("click", "a.prebtn", function () {
                    var cur = parseInt(obj.children("span.current").text());
                    var current = $.extend(pageinit, {"current": cur - 1});
                    zp.addhtml(obj, current);
                    if (typeof (pageinit.backfun) == "function") {
                        pageinit.backfun(current);
                    }
                });
                obj.on("click", "a.zxfPagenum", function () {
                    var cur = parseInt($(this).text());
                    var current = $.extend(pageinit, {"current": cur});
                    zp.addhtml(obj, current);
                    if (typeof (pageinit.backfun) == "function") {
                        pageinit.backfun(current);
                    }
                });
                obj.on("click", "a.nextbtn", function () {
                    var cur = parseInt(obj.children("span.current").text());
                    var current = $.extend(pageinit, {"current": cur + 1});
                    zp.addhtml(obj, current);
                    if (typeof (pageinit.backfun) == "function") {
                        pageinit.backfun(current);
                    }
                });
                obj.on("click", "span.zxfokbtn", function () {
                    var cur = parseInt($("input.zxfinput").val());
                    var current = $.extend(pageinit, {"current": cur});
                    zp.addhtml(obj, {"current": cur, "pageNum": pageinit.pageNum});
                    if (typeof (pageinit.backfun) == "function") {
                        pageinit.backfun(current);
                    }
                });
            }());
        }
    }
    $.fn.createPage = function (options) {
        var pageinit = $.extend({
            pageNum: 15,
            current: 1,
            backfun: function () {
            }
        }, options);
        zp.init(this, pageinit);
    }
}(jQuery));

CSS

.page{text-align: center; margin: 20px}
.zxf_pagediv {text-align: center;}
.zxf_pagediv a { display: inline-block; margin: 0 10px; border: 1px solid #e4e1e1; background: #fff; line-height: 26px; padding: 0 15px;}
.zxf_pagediv .zxfinput {border: 1px solid #e4e1e1; background: #fff; line-height: 26px; text-align: center; width: 40px; margin: 0 10px;}
.zxf_pagediv .zxfokbtn {margin: 0 10px; border: 1px solid #e4e1e1; background: #fff; line-height: 26px; padding: 0 15px; display: inline-block;}
.zxf_pagediv span.current {background: #30a5da;color: #fff;margin: 0 10px; border: 1px solid #30a5da; line-height: 26px; padding: 0 15px; display: inline-block;}
.zxf_pagediv span.disabled {margin: 0 10px; border: 1px solid #e4e1e1; background: #fff; line-height: 26px; padding: 0 15px; display: inline-block;color: #999;}

页面调用

<div class="page">
    <div id="yzzlsxhmd_page" class="zxf_pagediv"></div>
</div>
//翻页
$("#yzzlsxhmd_page").createPage({
    pageNum: total,
    current: 1,
    backfun: function(e) {
    }
})

pageNum是总页数,也就是说你分页插件显示多少页,但是我们大多数的时候是根据总条数去赋值来显示有多少页,比如干VUE项目用element的ui分页,这里发下算法,特意去看了下其他组件的源码

Math.ceil(总条数 / 每页多少条)

pageNum传入自己算出来的就可以了。

current代表当前第几页

backfun回调函数,当你去点击分页插件上的事件时回返回分页会切换到第几页,e.current就是第几页

 

说下我踩的坑吧,之前说过了,我要更新分页上的条数页数数据,但是封装的js里只有createPage,后来我就去每次都去调用,发现调多了,每次点下一页都会跳N次,就好比事件重合了N次。看了下封装

每次调用都会去绑定事件,那么问题解决了,只要自己写套更新不要绑定事件就好了

 

 

这样我们首次进页面保证初始化的时候create只执行一次,剩下在页面不关闭的情况下只让他刷新就好了

比如我做了个flag初始的时候true,调过一次就false,只刷新就好了

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值