[原创]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'>到第 <span></span> 页 </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:; 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:;width:200%;height:100%;}
100%{-webkit-transform:translate(-20px);opacity:;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:;width:200%;height:100%;}
100%{-webkit-transform:translate(20px);opacity:;width:1%;height:1%;}
} @keyframes scroll_k_l{
0%{transform:translate(-100px);opacity:0.2;width:200%;height:100%;}
99%{transform:translate(-20px);opacity:;width:200%;height:100%;}
100%{transform:translate(-20px);opacity:;width:1%;height:1%;}
} @keyframes scroll_k_r{
0%{transform:translate(100px);opacity:0.2;width:200%;height:100%;}
99%{transform:translate(20px);opacity:;width:200%;height:100%;}
100%{transform:translate(20px);opacity:;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分页插件的更多相关文章
- jquery+css3打造一款ajax分页插件
原文:[原创]jquery+css3打造一款ajax分页插件 最近公司的项目将好多分页改成了ajax的前台分页以前写的分页插件就不好用了,遂重写一个 支持IE6+,但没有动画效果如果没有硬需求,个人认 ...
- 精心挑选的12款优秀 jQuery Ajax 分页插件和教程
在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的 ...
- 转:精心挑选的12款优秀 jQuery Ajax 分页插件和教程
在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的 ...
- 12款优秀 jQuery Ajax 分页插件和教程
12款优秀 jQuery Ajax 分页插件和教程 在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 W ...
- 12款优秀jQuery Ajax分页插件和教程
在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的 ...
- jQuery Pagination Ajax分页插件中文详解(摘)
jQuery Pagination Ajax分页插件中文详解 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxin ...
- [转]jQuery Pagination Ajax分页插件中文详解
在做项目时需要用到在前端页面中需要实现分页显示的功能,类似于博客园下面的分页导航.从网上找了几个,觉得下面这个使用起来非常简单,也很方便.特在这里记录一下. 以下为文章原文. 中文项目地址:http: ...
- jQuery Pagination Ajax分页插件中文详解(转)
一.相关demo 基本demo页面 Ajax demo页面 参数可编辑demo页面 二.简介与说明 此jQuery插件为Ajax分页插件,一次性加载,故分页切换时无刷新与延迟,如果数据量较大不建议用此 ...
- 源码来袭!!!基于jquery的ajax分页插件(demo+源码)
前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客 ...
随机推荐
- 如何将网页的title前面的图标替换成自己的图标
首先要准备自己的图标,图标必须是.ico格式的图片,网上有很多在线工具可以将自己的图片转换成ico格式的图片,这里给大家介绍两个网站 在线ico转换工具:生成的图标是可以选尺寸的,原图片的大小不限制 ...
- 解决ASP.NET上传文件大小限制
第一种方法,主要适用于IIS6.0版本 一.修改配置Web.Config文件中的httpRuntime节点对于asp.net,默认只允许上传4M文件,增加如下配置,一般可以自定义最大文件大小.一.修改 ...
- 深入C#编程
1.NET框架 1.1.NET框架结构 VB.NET C# F# lronruby others.... .NET FrameWork(FCL) 公共语言进行时(CLR) 操作系统 .NET框架具有两 ...
- mac机上搭建php56/nginx 1.8.x/thinkphp 3.2.x/gearman扩展/seaslog扩展/redis扩展环境
php的各种扩展配置起来实在不容易,记录一下备忘: 一.php56 安装 虽然php7出来了,但是没用过,不知道有没有坑,这里仍然使用php5.6版本 1.1 安装php/php-pfm brew u ...
- cosbench 压测RGW生产环境
配置信息: 使用 2个万兆网卡的RGW主机,并用OSPF做高可用和负载均衡. Ceph OSD集群 有21Node (万兆网卡+ 12个4T SATA机械硬盘) 测试VM配置: 使用在使用VXLA ...
- 【USACO 3.2】Spinning Wheels(同心圆旋转)
题意: 5个同心圆,告诉你角速度,每个圆有1至5个楔,告诉你起点和宽度.求最早时间如果有的话使得存在某个角度经过5个圆的楔. 题解: 最重要的是要意识到,360秒钟后,每个圆都回到了原来的位置. 我的 ...
- 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(三)
Spring+SpringMVC MVC呢,现在似乎越来越流行使用SpringMVC框架,我自己用的感觉,是非常好,确实很舒服,配置一开始是麻烦了一点点,但是后续的开发真的是很清爽! SpringMV ...
- UOJ59 WC2013 小Q运动季
题意:给一个模线性方程组,构造解满足尽量多的方程. 直接枚举. 模数两两互质,先排除无解的,然后CRT,然而要高精,上python. 直接高消,有完美解. 2^20暴搜. 分解模数,对每个质数高消,C ...
- 前端js书写规范和维护方案
在网上看到一篇文章,写的是怎样来维护自己写的js.感觉挺不错的,感觉代码很漂亮,转之,代码如下: /** * Created by gerry.zhong on 2016/10/11. */ var ...
- video.js-H5视频播放库
video.js是一款很流行的html5视频播放插件.很适合在移动端播放视频(比如微信网页),功能强大,且支持降级到flash,兼容ie8.官网:http://videojs.com/ git& ...