资讯专栏INFORMATION COLUMN

jQuery插件--分页

trilever / 824人阅读

摘要:避免函数体内和外部的变量冲突。实参分别接受对象,对象都是全局环境下的,而在函数体内的其实是局部变量,不是全局的对象。

查看效果

HTML



    
    
    



JS
;(function ($, window, document, undefined) {
    "use strict";
    function Paging(element, options) {
        this.element = element;
        this.options = {
            pageNum: options.pageNum || 1, // 当前页码
            totalNum: options.totalNum, // 总页码
            totalList: options.totalList, // 数据总记录
            callback: options.callback // 回调函数
        };
        this.init();
    }
    Paging.prototype = {
        constructor: Paging,
        init: function () {
            this.createHtml();
            this.bindEvent();
        },
        createHtml: function () {
            var me = this;
            var content = [];
            var pageNum = me.options.pageNum;
            var totalNum = me.options.totalNum;
            var totalList = me.options.totalList;
            content.push("");
            // 总页数大于6必显示省略号
            if (totalNum > 6) {
                // 1、当前页码小于5且总页码大于6 省略号显示后面+总页码
                if (pageNum < 5) {
                    // 1与6主要看要显示多少个按钮 目前都显示5个
                    for (var i = 1; i < 6; i++) {
                        if (pageNum !== i) {
                            content.push("");
                        } else {
                            content.push("");
                        }
                    }
                    content.push(". . .");
                    content.push("");
                } else {
                    // 2、当前页码接近后面 中间隔3个 省略号显示后面+总页面
                    if (pageNum < totalNum - 3) {
                        for (var i = pageNum - 2; i < pageNum + 3; i++) {
                            if (pageNum !== i) {
                                content.push("");
                            } else {
                                content.push("");
                            }
                        }
                        content.push(". . .");
                        content.push("");
                    } else {
                        // 3、页码至少在5,最多在【totalNum - 3】的中间位置 第一页+省略号显示前面
                        content.push("");
                        content.push(". . .");
                        for (var i = totalNum - 4; i < totalNum + 1; i++) {
                            if (pageNum !== i) {
                                content.push("");
                            } else {
                                content.push("");
                            }
                        }
                    }
                }
            } else {
                // 总页数小于6
                for (var i = 1; i < totalNum + 1; i++) {
                    if (pageNum !== i) {
                        content.push("");
                    } else {
                        content.push("");
                    }
                }
            }
            content.push("");
            content.push(" 共 " + totalNum + " 页 ");
            content.push(" 共 " + totalList + " 条记录 ");
            me.element.html(content.join(""));

            // DOM重新生成后每次调用是否禁用button
            setTimeout(function () {
                me.dis();
            }, 20);
        },
        bindEvent: function () {
            var me = this;
            me.element.off("click", "button");
            // 委托新生成的dom监听事件
            me.element.on("click", "button", function () {
                var id = $(this).attr("id");
                var num = parseInt($(this).html());
                var pageNum = me.options.pageNum;
                if (id === "prePage") {
                    if (pageNum !== 1) {
                        me.options.pageNum -= 1;
                    }
                } else if (id === "nextPage") {
                    if (pageNum !== me.options.totalNum) {
                        me.options.pageNum += 1;
                    }
                } else if (id === "firstPage") {
                    if (pageNum !== 1) {
                        me.options.pageNum = 1;
                    }
                } else if (id === "lastPage") {
                    if (pageNum !== me.options.totalNum) {
                        me.options.pageNum = me.options.totalNum;
                    }
                } else {
                    me.options.pageNum = num;
                }
                me.createHtml();
                if (me.options.callback) {
                    me.options.callback(me.options.pageNum);
                }
            });
        },
        dis: function () {
            var me = this;
            var pageNum = me.options.pageNum;
            var totalNum = me.options.totalNum;
            if (pageNum === 1) {
                me.element.children("#firstPage, #prePage").prop("disabled", true);
            } else if (pageNum === totalNum) {
                me.element.children("#lastPage, #nextPage").prop("disabled", true);
            }
        }
    };
    $.fn.paging = function (options) {
        return new Paging($(this), options);
    }
})(jQuery, window, document);

jQuery插件友情链接

// 1、代码最前面的分号,可以防止多个文件压缩合并以为其他文件最后一行语句没加分号,而引起合并后的语法错误。
// 2、匿名函数(function(){})();:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。避免函数体内和外部的变量冲突。
// 3、$实参:$是jquery的简写,很多方法和类库也使用$,这里$接受jQuery对象,也是为了避免$变量冲突,保证插件可以正常运行。
// 4、window, document实参分别接受window, document对象,window, document对象都是全局环境下的,而在函数体内的window, document其实是局部变量,不是全局的window, document对象。这样做有个好处就是可以提高性能,减少作用域链的查询时间,如果你在函数体内需要多次调用window 或 document对象,这样把window 或 document对象当作参数传进去,这样做是非常有必要的。当然如果你的插件用不到这两个对象,那么就不用传递这两个参数了。
// 5、undefined形参了,看起来是有点多余。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103170.html

相关文章

  • 我以前写的一个jQuery分页插件

    摘要:用分布函数来制作分页链接,可以省下很多代码流量呢看看跳转到页之后只要这么引用它就好了 用JavaScript分布函数来制作分页链接,可以省下很多html代码流量呢!看看 (function($){ $.fn.pagination=function(pagecount,page,surl){ var $box=$(this).empty();var shtml= if(pagecoun...

    vspiders 评论0 收藏0
  • jQuery插件simplePagination的使用_03

    摘要:插件的使用正在熟悉项目上的代码,新添加了一个需要,需要对表单进行分页,之前的代码中是有分页的代码的,看了老半天,也没看太明白。 jQuery插件simplePagination的使用 正在熟悉项目上的代码,新添加了一个需要,需要对表单进行分页,之前的代码中是有分页的代码的,看了老半天,也没看太明白。之前的项目比较久远,继续熟悉代码。 simplePagination的使用 HTML页面...

    NotFound 评论0 收藏0
  • jQuery插件simplePagination的使用-踩坑记_03

    摘要:插件的使用正在熟悉项目上的代码,新添加了一个需要,需要对表单进行分页,之前的代码中是有分页的代码的,看了老半天,也没看太明白。 jQuery插件simplePagination的使用 正在熟悉项目上的代码,新添加了一个需要,需要对表单进行分页,之前的代码中是有分页的代码的,看了老半天,也没看太明白。之前的项目比较久远,继续熟悉代码。 simplePagination的使用 HTML页面...

    罗志环 评论0 收藏0
  • Web前端常用插件

    摘要:弹窗视频嵌入插件幻灯片图片切换手机端响应式日期控件上传图片控件校验控件分页静态分页动态分页相册效果控件多级下拉图片延迟加载或响应式管理模板插件库大转盘九宫格效果整屏滚动滚动效果用于移动项目的光滑菜单浏览器端格式化工具千手观音 弹窗 1.blockUI2.overlay 3.sweetAlert 视频 1.jwplayer2.video.js html53.swfobject Flas...

    quietin 评论0 收藏0
  • 前端技术 博客文章、书籍 积累

    摘要:好多编辑器例如等都支持这样的语法来快速的编写代码如何优雅地使用把标签放在结束标签之后结束标签之前的差别什么是响应式设计怎样进行 书籍 《JavaScriptDOM编程艺术》《JavaScript高级程序设计》《JavaScript框架设计》《JavaScript专家编程》《JavaScript Ninjia》《JavaScript语言精粹(修订版)》《JavaScript设计模式》《J...

    LiangJ 评论0 收藏0

发表评论

0条评论

trilever

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<