[原创]jquery+css3打造一款ajax分页插件

最近公司的项目将好多分页改成了ajax的前台分页
以前写的分页插件就不好用了,遂重写一个

支持IE6+,但没有动画效果
如果没有硬需求,个人认为没必要多写js让动画在这些浏览器中实现
css3的动画本来就是帮我们取代js中这部分动画代码的
使js更纯粹地去实现逻辑

效果图如下:

调用代码如下:

包括常用的加载失败重试,参数可配置是否能手动输入页码,设置按钮数目,可以调用多个page等等,调用代码很简便

<script type="text/javascript">
    var kpage;

    $(function () {
        tocount();
    });

    function tocount() {
        //初始化
        $.ajax({ url: "/Service/DBCount", type: "post", success: function (e) {
            kpage = $("#divPage").page({ dataCount: e, pageChange: topage });
        }
        });
    }

    function topage(i, s) {
        //数据查询
        $("#divInfo").html("加载中...");
        $.ajax({ url: "/Service/List", type: "post", data: { PageSize: s, PageIndex: i }, success: function (r) {
            $("#tList").html(r);
            $("#divInfo").html("");
        }, error: function () {
            $("#divInfo").html("加载失败...<a href=‘javascript:reload();‘>重试</href>");
        }
        });
    }

    function reload() {
        kpage.reload();
    }

</script>

具体jquery.kun_page.js:

/*
jquery.kun_page.js
lxk 2014.06.16
www.cnblogs.com/wingkun

---------------------------------
参数config:

dataCount:数据总数

pageSize:页数据条数

maxButton:页码按钮数目

showCustom:是否能手动输入页码   

pageChange:页变更事件
参数:(i,s,c)
i:pageIndex,当前页
s:pageSize,页数据条数
c:pageCount,总页数

*/

(function($){

$.fn.page = function (config) {

    if (this.length != 1) {
        throw "k_page:如有多个page请调用多次!";
    }

    var defaults = { dataCount: 1, pageSize: 10, maxButton: 6, showCustom: true, pageChange: null }
    config = $.extend(defaults, config);

    if (config.maxButton <= 1) config.maxButton = 2;
    if (config.pageSize < 1) config.pageSize = 1;
    //按钮数目需偶数
    if (config.maxButton % 2 != 0)
        config.maxButton++;

    var pageIndex = 1, pageCount, move_kf;

    //初始化页数
    function initcount() {
        pageCount = config.dataCount % config.pageSize == 0 ? config.dataCount / config.pageSize : parseInt(config.dataCount / config.pageSize) + 1;
    }
    initcount();

    var prev = "<div class=‘k_p_prev‘><i></i>上一页</div>", next = "<div class=‘k_p_next‘>下一页<i></i></div>", pbody = $("<span style=‘display:block;float:left;overflow:hidden;‘></span>"), pcustom = $("<span class=‘k_custom‘>到第&nbsp;<span></span>&nbsp;页 </span><div class=‘k_btn‘>确定</div>"), cl = "<div class=‘k_cl‘></div>", pipt = $("<input class=‘k_ipt‘>");
    this.empty().addClass("kun_page").append(prev);
    pipt.keypress(function (e) {
        if (e.which == 13) {
            topage("确定");
            return false;
        }
    }).appendTo(pcustom.children());

    if (config.pageChange) {
        this.unbind("click").bind("click", function (e) {
            var _t = $(e.target);
            if (_t[0].tagName == "DIV" && _t[0].className != "kun_page") {
                topage(_t.text());
            }
        });
    }

    //跳转页码
    function topage(text) {

        switch (text) {
            case "上一页":
                if (pageIndex - 1 < 1) {
                    return;
                }
                pageIndex--;
                move_kf = "sc_r";
                break;
            case "下一页":
                if (pageIndex + 1 > pageCount) {
                    return;
                }
                pageIndex++;
                move_kf = "sc_l";
                break;
            case "确定":

                if (!/^\d+$/.test(pipt.val())) {
                    pipt.val("");
                    return;
                }
                text = parseInt(pipt.val());
                if (text < 1 || text > pageCount) {
                    pipt.val("");
                    return;
                }

            default:
                var _pindex = parseInt(text);
                if (pageIndex == _pindex)
                    return;
                move_kf = pageIndex < _pindex ? "sc_l" : "sc_r";
                pageIndex = _pindex;
                break;
        }

        gopageChange();
    }

    //页变更事件
    function gopageChange() {
        if (config.pageChange) {
            if (config.dataCount != 0) {
                config.pageChange(pageIndex, config.pageSize, pageCount);
                endloading();
            }
        }
    }

    //异步加载结束
    function endloading() {
        initpage();

    }

    //添加页码
    function initpage() {
        pbody.empty();
        var _t_maxb = config.maxButton / 2;
        //前后页码集合
        var _t_listp = [], _t_listn = [];
        var _min = 0, _max = pageCount;

        for (var i = 1; i <= _t_maxb; i++) {
            var _t_prev = pageIndex - i, _t_next = pageIndex + i;
            //当前页码之前的页
            if (_t_prev > 0) {
                _t_listp.push("<div class=‘k_p_page‘>" + _t_prev + "</div>");
                if (i == _t_maxb) _min = _t_prev;
            }
            //当前页码之后的页
            if (_t_next <= pageCount) {
                _t_listn.push("<div class=‘k_p_page‘>" + _t_next + "</div>");
                if (i == _t_maxb) _max = _t_next;
            }
        }
        //显示第一页
        if (_min > 1) pbody.append("<div class=‘k_p_page‘>1</div>");
        //显示前 ……
        if (_min - 1 > 1) pbody.append("<em>...</em>");

        for (var i = _t_listp.length; i >= 0; i--) {
            pbody.append(_t_listp[i]);
        }

        pbody.append("<div class=‘k_p_page k_p_current‘>" + pageIndex + "<i class=‘k_m " + move_kf + "‘></i></div>");

        for (var i = 0; i < _t_listn.length; i++) {
            pbody.append(_t_listn[i]);
        }

        //显示后 ……
        if (pageCount - _max > 1) pbody.append("<em>...</em>");

        //显示最后一页
        if (_max < pageCount) pbody.append("<div class=‘k_p_page‘>" + pageCount + "</div>");

    }

    initpage();
    gopageChange();

    this.append(pbody).append(next);
    if (config.showCustom)
        this.append(pcustom);
    this.append(cl);

    return { reload: gopageChange, pageCount: pageCount, recount: function (e) {
        //重新计算页数
        config.dataCount = e;
        pageIndex = 1;
        initcount();
        initpage();
        gopageChange();
    }
    };

    //console.log(_min + "*" + _max + "*" + pageCount);
}

})(jQuery)

样式kun_page.css:

/*
    kun_page.css
    lxk 2014.06.16
    www.cnblogs.com/wingkun
*/

.kun_page {font-size: 12px;line-height:23px;font-family:"Microsoft YaHei";}
.kun_page .k_p_page{position:relative;}
.kun_page div {float: left;margin: 3px;border: solid 1px #ccc;cursor: pointer;color: #333;min-width:12px;text-align:center;padding:0px 5px;}
.kun_page em {display: block;float: left;margin: 2px;}
.kun_page .k_p_current {background: #ccc;color: #fff;-webkit-animation:scroll_b 300ms;animation:scroll_b 300ms;}
.kun_page .k_cl {clear: both;float: none;border: none;margin: 0px;padding: 0px;width:0px;height:0px;}
.kun_page .k_custom {display: block;float: left;margin: 3px 3px 3px 20px;}
.kun_page .k_ipt {width: 30px;height: 21px;border: solid 1px #ccc;text-align: center;vertical-align:middle;}
.kun_page .k_m{ opacity: 0; width: 1%; height: 1%;top:0px;left:0px; display:block; position: absolute; }
.kun_page .sc_l{background: -webkit-gradient(linear, 0 100%, 100% 100%, from(#CCCCCC), to(#645F5F));
    -webkit-transform:translate(-50px);-webkit-animation:scroll_k_l 300ms linear;
    background: -moz-linear-gradient(left,#CCCCCC 0%, #645F5F 100%);
    background: -ms-linear-gradient(left,#CCCCCC 0%, #645F5F 100%);
    transform:translate(-50px);animation:scroll_k_l 300ms linear;

    }
.kun_page .sc_r{background: -webkit-gradient(linear, 0 100%, 100% 100%, from(#645F5F), to(#CCCCCC));
    -webkit-transform:translate(50px); -webkit-animation:scroll_k_r 300ms linear;
    background: -moz-linear-gradient(left, #645F5F 0%, #CCCCCC 100%);
    background: -ms-linear-gradient(left,#CCCCCC 0%, #645F5F 100%);
    transform:translate(50px); animation:scroll_k_r 300ms linear;
    }

/*
animation
*/

@-webkit-keyframes scroll_k_l{
0%{-webkit-transform:translate(-100px);opacity:0.2;width:200%;height:100%;}
99%{-webkit-transform:translate(-20px);opacity:0;width:200%;height:100%;}
100%{-webkit-transform:translate(-20px);opacity:0;width:1%;height:1%;}
}

@-webkit-keyframes scroll_k_r{
0%{-webkit-transform:translate(100px);opacity:0.2;width:200%;height:100%;}
99%{-webkit-transform:translate(20px);opacity:0;width:200%;height:100%;}
100%{-webkit-transform:translate(20px);opacity:0;width:1%;height:1%;}
}

@keyframes scroll_k_l{
0%{transform:translate(-100px);opacity:0.2;width:200%;height:100%;}
99%{transform:translate(-20px);opacity:0;width:200%;height:100%;}
100%{transform:translate(-20px);opacity:0;width:1%;height:1%;}
}

@keyframes scroll_k_r{
0%{transform:translate(100px);opacity:0.2;width:200%;height:100%;}
99%{transform:translate(20px);opacity:0;width:200%;height:100%;}
100%{transform:translate(20px);opacity:0;width:1%;height:1%;}
}

@-webkit-keyframes scroll_b{
0%,99%{background: #fff;color: #000;}
100%{background: #ccc;color: #fff;}
}
@keyframes scroll_b{
0%,99%{background: #fff;color: #000;}
100%{background: #ccc;color: #fff;}
}

样式和动画都可以自己修改(好吧,动画效果很朴素,闹哪样,明明想了很久好吗)

pageChange事件里面也没有过多的其他处理,比如我们公司前后台处理json就有一套方案,ajax提交的参数也有处理

所以若有需求,完全可以在我的代码上再封装一层

另外插件内公开的方法暂只有几个,可视情况增加

喜欢的可以帮我点一下“推荐”,谢啦!

代码下载(后台查询代码需要自己写一个):这里

[原创]jquery+css3打造一款ajax分页插件

时间: 2024-10-22 17:28:41

[原创]jquery+css3打造一款ajax分页插件的相关文章

基于jquery的ajax分页插件(demo+源码)

前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客园学习了很多的知识,看过很多人的分享.说来也惭愧,自己没能为园友们分享自己的所学所得(毕竟水平比较差). 过去的一年也是辗转了几个城市换了几份工作(注定本命年不太平?).八月份来到现在所在的公司(OTA行业),公司是做互联网的,所以可能大家的前端都屌屌的?之前一直从事.NET开发(现在在这边也是),

jquery ajax分页插件特效源代码demo完整版

原文:jquery ajax分页插件特效源代码demo完整版 源代码下载地址:http://www.zuidaima.com/share/1550463586798592.htm 网上找的,原版本没有测试数据和建表脚本啥的,我给加上了.

浅谈jQuery Pagination Ajax 分页插件的使用

插件介绍 此插件是jQuery的ajax分页插件.分页切换时无刷新也无延迟,因为是一次性加载的.如果你用到此插件作分页的时候,涉及到的数据量大,建议不要使用此插件,因为加载慢会导致用户体验不好! 插件使用 此插件使用比较简单.主要引入以下文件就可以用了 1.jquery.js依赖库 2.pagination.css 这个主要是样式,我们在元素使用的时候将分页列表放在class类为pagination的标签内即可 <div class='pagination'></div> 3.jq

html5和css3打造一款创意404页面

之前和网友分享一款HTML5可爱的404页面动画 很逗的机器人.今天要爱编程小编要再给大家带来一款html5和css3打造的创意404页面.一起看下效果图吧: 在线预览   源码下载 实现的代码. html代码: <svg class="me404" viewbox="0 0 1000 480"> <path id="cloud" class="st0" d="M658.4,345.2c-10.9,

Ajax分页插件Pagination从前台jQuery到后端java总结

前端代码.html var pageSize = 10;//设置每页显示条数 var total;//数据总条数 function pagination() { $("#Pagination").pagination(total, { callback : PageCallback, prev_text : '上一页', next_text : '下一页', items_per_page : pageSize, num_display_entries : 4, //连续分页主体部分显示

jQuery Pagination Ajax分页插件

下载地址:https://github.com/gbirke/jquery_pagination 参数 参数名 描述 参数值 maxentries 总条目数 必选参数,整数 items_per_page 每页显示的条目数 可选参数,默认是10 num_display_entries 连续分页主体部分显示的分页条目数 可选参数,默认是10 current_page 当前选中的页面 可选参数,默认是0,表示第1页 num_edge_entries 两侧显示的首尾分页的条目数 可选参数,默认是0 li

基于jQuery/CSS3实现拼图效果的相册插件

今天我们要来分享一款很酷的jQuery相册插件,首先相册中的图片会以一定的角度倾斜放置在页面上,点击图片缩略图就可以展开图片,并且图片是由所有缩略图拼接而成,图片展开和收拢的动画效果也非常不错.当然图片倾斜需要CSS3支持. 在线预览   源码下载 实现的代码. <div id="im_wrapper" class="im_wrapper"> <div style="background-position:0px 0px;"&g

ajax分页插件 支持自定义

<style> ul, li{ list-style: none; } .div_page{ -moz-user-select:none; } .div_page li{ display: inline-block; padding: 2px 8px; border: 1px solid #ddd; margin: 0px 2px; cursor: pointer; } .active{ color: #fff; background: #428bca; } .disable{ backgro

黄聪:手机移动端建站Jquery+CSS3+HTML5触屏滑动特效插件、实现触屏焦点图、图片轮展图

前言 TouchSlide 可以说是 SuperSlide 手机简化版,不同的地方在于:1.TouchSlide是纯javascript开发的,不依赖任何js库,鉴于此,TouchSlide调用方法和SuperSlide有点不同.调用方法为:TouchSlide({slideCell:"#slider",effect:"leftLoop"});(slideCell必须为id对象);同样效果,SuperSlide调用方法为:jQuery("#slider&q