妹子UI之自定义分页控件

原创 2016年08月30日 10:28:59

妹子UI,http://amazeui.org,在这儿顺便帮他打下广告,我个人觉得比Bootstrap漂亮,于是,我就选择了基于它的UI写出来自己的分页控件。

paginator.js的内容如下:

(function ($) {
    $.fn.paginator = function (options) {
        //this指向当前的选择器
        var config = {
            url: "",
            pageParent: "",
            totalBars: -1,
            limit: -1,
            offset: 1,
            callback: null
        }
        //合并参数
        var opts = $.extend(config, options);

        opts.totalBars = Math.ceil(opts.totalBars / opts.limit);
        //计算按钮的总个数

        //获取offset参数
        var queryString = function (url) {
            var offset = (url.split("?")[1]).split("=")[1];
            return parseInt(offset);
        }

        //ajax核心方法,用于分页的数据操作
        var ajaxCore = function (offset, fn) {
            $.ajax({
                "url": opts.url,
                "data": {
                    "offset": offset,
                    "limit": opts.limit
                },
                "dataType": "JSON",
                "method": "POST",
                "success": fn
            });
        }

        //重新装配分页按钮
        var pageCore = function (offset) {
            if (opts.offset == offset) {
                return;
            } //如果是当前页面,那么就什么事都不用干了!
            else {
                ajaxCore(offset, opts.callback);
                $(opts.pageParent).empty();
                //否则,清空所有的节点,重新向DOM插入新的分页按钮
                var output = "";
                var nextBar = offset == opts.totalBars ? "<li class=\"am-disabled\"><a yxhref=\"javascript:;\">»</a></li>" : "<li><a yxhref=\"" + opts.url + (offset + 1) + "\">»</a></li>";
                var preBar = offset == 1 ? "<li class=\"am-disabled\"><a yxhref=\"javascript:;\">«</a></li>" : "<li><a yxhref=\"" + opts.url + (offset - 1) + "\">«</a></li>";
                //组装向上一个节点和下一页节点
                if (opts.totalBars > 7) {
                    if (offset < 5) {
                        output += preBar;
                        for (var i = 1; i <= 5; i++) {
                            if (i == offset) {
                                output += "<li class=\"am-active\"><a yxhref=\"" + opts.url + offset + "\">" + offset + "</a></li>";
                            } else {
                                output += "<li><a yxhref=\"" + opts.url + i + "\">" + i + "</a></li>";
                            }
                        }
                        output += "<li><span>...</span></li>";
                        output += "<li><a yxhref=\"" + opts.url + (opts.totalBars) + "\">" + (opts.totalBars) + "</a></li>" + nextBar;
                    } else if (offset >= 5 && offset <= opts.totalBars - 4) {
                        //当页面大于7个的时候,那么在第五个和倒数第五个时,执行
                        output += preBar;
                        output += "<li><a yxhref=\"" + opts.url + 1 + "\">" + 1 + "</a></li>";
                        //第一个
                        output += "<li><span>...</span></li>"; //省略号

                        output += "<li><a yxhref=\"" + opts.url + (offset - 1) + "\">" + (offset - 1) + "</a></li>";

                        output += "<li class=\"am-active\"><a  yxhref=\"" + opts.url + offset + "\">" + offset + "</a></li>";

                        output += "<li><a yxhref=\"" + opts.url + (offset + 1) + "\">" + (offset + 1) + "</a></li>";

                        output += "<li><span>...</span></li>"; //省略号;

                        output += "<li><a yxhref=\"" + opts.url + (opts.totalBars) + "\">" + (opts.totalBars) + "</a></li>"; //尾页

                        output += nextBar;

                    } else if (offset > opts.totalBars - 4 && offset <= opts.totalBars) {
                        //当页面位于倒数第四个时候
                        output += preBar;
                        output += "<li><a yxhref=\"" + opts.url + 1 + "\">" + 1 + "</a></li>" + "<li><span>...</span></li>";

                        for (var j = 4; j >= 0; j--) {
                            if (opts.totalBars - j == offset) {
                                output += "<li class=\"am-active\"><a yxhref=\"" + opts.url + (opts.totalBars - j) + "\">" + (opts.totalBars - j) + "</a></li>";
                            } else {
                                output += "<li><a yxhref=\"" + opts.url + (opts.totalBars - j) + "\">" + (opts.totalBars - j) + "</a></li>";
                            }
                        }
                        output += nextBar;
                    } else {
                        console.log("分页数据出错!");
                        return;
                    }
                } else {
                    output += preBar;
                    for (var i = 1; i <= opts.totalBars; i++) {
                        if (i == offset) {
                            output += "<li class=\"am-active\"><a yxhref=\"" + opts.url + offset + "\">" + offset+ "</a></li>";
                        } else {
                            output += "<li><a yxhref=\"" + opts.url + i + "\">" + i+ "</a></li>";
                        }
                    }
                    output += nextBar;
                }
                $(opts.pageParent).append(output);
                opts.offset = offset; //将偏移量赋值给config里面的offset
            }
        }

        //清理函数,防止多绑定事件和重新计算分页
        var clear = function () {
            $(opts.pageParent).empty().undelegate();
        }


        //初始化装配分页按钮
        var init = function (fn) {
            if (typeof (fn) != "function") {
                console.log("将不能正确的执行回调函数");
            } else {
                opts.callback = fn;
            }
            clear();
            ajaxCore(1, opts.callback);//执行初始化ajax方法
            var preBar = "<li class=\"am-disabled\"><a yxhref=\"javascript:;\">«</a></li>";
            //上一页,(禁用的效果)
            //如果只有一页,那么禁用下一页
            var nextBar = opts.totalBars > 1 ? "<li><a yxhref=\"" + opts.url + 2 + "\">»</a></li>" : "<li class=\"am-disabled\"><a yxhref=\"javascript:;\">»</a></li>";
            //最后一页
            var output = "<li class=\"am-active\"><a yxhref=\"" + opts.url + 1 + "\">1</a></li>";

            if (opts.totalBars <= 7) {
                for (var i = 1; i < opts.totalBars; i++) {
                    output += "<li><a yxhref=\"" + opts.url + (i + 1) + "\">" + (i + 1) + "</a></li>";
                }
            } else {
                for (var j = 1; j < 5; j++) {
                    output += "<li><a yxhref=\"" + opts.url + (j + 1) + "\">" + (j + 1) + "</a></li>";
                }
                output += "<li><span>...</span></li>";
                output += "<li><a yxhref=\"" + opts.url + (opts.totalBars) + "\">" + (opts.totalBars) + "</a></li>";
            }
            $(opts.pageParent).delegate("a","click", function () {
                var offset = queryString($(this).attr("yxhref"));
                console.log("ok");
                pageCore(offset);
            });
            $(opts.pageParent).append(preBar + output + nextBar);
        };
        init(opts.callback);//初始化分页引擎
    }
}(window.jQuery))


调用方法如下:

 $("#paginator").paginator({
                    url: "/Service/Main/LogPage?offset=",
                    pageParent: "#paginator",
                    totalBars: total,
                    limit:limit,
                    offset: 1,
                    callback: function (data) {
                        //清空DOM节点
                       
                    }
                });

由于我设计的时候以Ajax分页来考虑的,所以在callback中直接写你要进行的ajax返回之后的操作,这个参数和ajax的参数data是一样的。

提醒:url需要挂一个offset参数,需要事先知道有多少条数据,在html中只需要一个父节点,即

 <ul id="paginator" class="am-pagination am-fr"></ul>

如果你操作正常,应该会有正确的结果。






版权声明:本文为博主原创文章,未经博主允许不得转载。

自己封装的js分页插件,好处是可以自定义样式

页面代码: /*页码样式 begin*/ ol, ul { list-style: none; } ...
  • u011511086
  • u011511086
  • 2017年09月08日 16:35
  • 562

amaze ui 的使用

今天老师给我讲解了amaze ui的使用,在此与大家分享我的学习笔记。amaze ui的官网虽然已经提供了具体的实现步骤,但是对于没有前台开发经验的我,理解起来还是很有困难的。 引言    一个前...
  • cleanarea
  • cleanarea
  • 2015年07月13日 20:39
  • 6061

AmazeUiDemoAll

  • 2015年10月14日 13:47
  • 1.69MB
  • 下载

Jquery easy ui的分页,table,数据加载

最近用到了,做个笔记。 注意的问题: 1.jquery easy ui不支持单引号的json字符串,解析数据会出现问题 2.Jquery能支持的表单解析格式是: {"total":1,"rows":...
  • a574258039
  • a574258039
  • 2014年01月06日 09:44
  • 2938

百度地图之UI控制

在本文中主要介绍百度地图UI控制功能,即控制地图是否有缩放、平移、双击放大、旋转、俯视的功能以及控制是否显示内置缩放组件、指南针位置等。在文中采用标签监听使每个控制功能的方法见名知义,代码原型来源百度...
  • u010142437
  • u010142437
  • 2013年09月01日 20:30
  • 2083

折叠面板的改进【Amaze UI】

折叠面板或者说折叠列表在移动端的使用非常广泛,不仅可以让页面渲染地更简洁,而且使用起来也是很大方,很实用。在做项目的过程中,我应用到了这个功能,进行了改进并应用,接下来详细讲解。 结果展示: ...
  • u010297791
  • u010297791
  • 2016年10月09日 10:51
  • 1587

layer 分页控件

layPage demo                                                 //测试数据         var data = [...
  • mss359681091
  • mss359681091
  • 2016年04月06日 11:08
  • 3587

局域网给查看妹子图片和妹子账号密码

前面说了arp攻击使妹子断网,接下来说说怎么查看妹子图片和账号密码 首先开启流量转发:echo 1 > /proc/sys/net/ipv4/ip_forward 然后arpspoof 欺骗, a...
  • zsd747289639
  • zsd747289639
  • 2016年11月12日 20:40
  • 486

python 爬虫 实战 抓取妹子图中图

python 爬虫 实战 抓取妹子图中的图 本文通过一个实际例子来教大家进入爬虫世界。...
  • u013473520
  • u013473520
  • 2015年12月04日 11:10
  • 3579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:妹子UI之自定义分页控件
举报原因:
原因补充:

(最多只允许输入30个字)