jquery+css3打造一款ajax分頁(yè)插件(自寫(xiě))
最近公司的項(xiàng)目將好多分頁(yè)改成了ajax的前臺(tái)分頁(yè)
以前寫(xiě)的分頁(yè)插件就不好用了,遂重寫(xiě)一個(gè)
支持IE6+,但沒(méi)有動(dòng)畫(huà)效果
如果沒(méi)有硬需求,個(gè)人認(rèn)為沒(méi)必要多寫(xiě)js讓動(dòng)畫(huà)在這些瀏覽器中實(shí)現(xiàn)
css3的動(dòng)畫(huà)本來(lái)就是幫我們?nèi)〈鷍s中這部分動(dòng)畫(huà)代碼的
使js更純粹地去實(shí)現(xiàn)邏輯
效果圖如下:

調(diào)用代碼如下:
包括常用的加載失敗重試,參數(shù)可配置是否能手動(dòng)輸入頁(yè)碼,設(shè)置按鈕數(shù)目,可以調(diào)用多個(gè)page等等,調(diào)用代碼很簡(jiǎn)便
<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) {
//數(shù)據(jù)查詢
$("#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
---------------------------------
參數(shù)config:
dataCount:數(shù)據(jù)總數(shù)
pageSize:頁(yè)數(shù)據(jù)條數(shù)
maxButton:頁(yè)碼按鈕數(shù)目
showCustom:是否能手動(dòng)輸入頁(yè)碼
pageChange:頁(yè)變更事件
參數(shù):(i,s,c)
i:pageIndex,當(dāng)前頁(yè)
s:pageSize,頁(yè)數(shù)據(jù)條數(shù)
c:pageCount,總頁(yè)數(shù)
*/
(function($){
$.fn.page = function (config) {
if (this.length != 1) {
throw "k_page:如有多個(gè)page請(qǐng)調(diào)用多次!";
}
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;
//按鈕數(shù)目需偶數(shù)
if (config.maxButton % 2 != 0)
config.maxButton++;
var pageIndex = 1, pageCount, move_kf;
//初始化頁(yè)數(shù)
function initcount() {
pageCount = config.dataCount % config.pageSize == 0 ? config.dataCount / config.pageSize : parseInt(config.dataCount / config.pageSize) + 1;
}
initcount();
var prev = "上一頁(yè)", next = "下一頁(yè)", pbody = $(""), pcustom = $("到第 頁(yè) 確定"), cl = "", pipt = $("");
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());
}
});
}
//跳轉(zhuǎn)頁(yè)碼
function topage(text) {
switch (text) {
case "上一頁(yè)":
if (pageIndex - 1 < 1) {
return;
}
pageIndex--;
move_kf = "sc_r";
break;
case "下一頁(yè)":
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();
}
//頁(yè)變更事件
function gopageChange() {
if (config.pageChange) {
if (config.dataCount != 0) {
config.pageChange(pageIndex, config.pageSize, pageCount);
endloading();
}
}
}
//異步加載結(jié)束
function endloading() {
initpage();
}
//添加頁(yè)碼
function initpage() {
pbody.empty();
var _t_maxb = config.maxButton / 2;
//前后頁(yè)碼集合
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;
//當(dāng)前頁(yè)碼之前的頁(yè)
if (_t_prev > 0) {
_t_listp.push("" + _t_prev + "");
if (i == _t_maxb) _min = _t_prev;
}
//當(dāng)前頁(yè)碼之后的頁(yè)
if (_t_next <= pageCount) {
_t_listn.push("" + _t_next + "");
if (i == _t_maxb) _max = _t_next;
}
}
//顯示第一頁(yè)
if (_min > 1) pbody.append("1");
//顯示前 ……
if (_min - 1 > 1) pbody.append("...");
for (var i = _t_listp.length; i >= 0; i--) {
pbody.append(_t_listp[i]);
}
pbody.append("" + pageIndex + "");
for (var i = 0; i < _t_listn.length; i++) {
pbody.append(_t_listn[i]);
}
//顯示后 ……
if (pageCount - _max > 1) pbody.append("...");
//顯示最后一頁(yè)
if (_max < pageCount) pbody.append("" + pageCount + "");
}
initpage();
gopageChange();
this.append(pbody).append(next);
if (config.showCustom)
this.append(pcustom);
this.append(cl);
return { reload: gopageChange, pageCount: pageCount, recount: function (e) {
//重新計(jì)算頁(yè)數(shù)
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;}
}
樣式和動(dòng)畫(huà)都可以自己修改(好吧,動(dòng)畫(huà)效果很樸素,鬧哪樣,明明想了很久好嗎)
pageChange事件里面也沒(méi)有過(guò)多的其他處理,比如我們公司前后臺(tái)處理json就有一套方案,ajax提交的參數(shù)也有處理
所以若有需求,完全可以在我的代碼上再封裝一層
另外插件內(nèi)公開(kāi)的方法暫只有幾個(gè),可視情況增加
代碼下載(后臺(tái)查詢代碼需要自己寫(xiě)一個(gè)):這里
- jQuery Pagination Ajax分頁(yè)插件(分頁(yè)切換時(shí)無(wú)刷新與延遲)中文翻譯版
- jquery分頁(yè)插件jquery.pagination.js使用方法解析
- Jquery 分頁(yè)插件之Jquery Pagination
- 最實(shí)用的jQuery分頁(yè)插件
- 分享一個(gè)自己動(dòng)手寫(xiě)的jQuery分頁(yè)插件
- Ajax分頁(yè)插件Pagination從前臺(tái)jQuery到后端java總結(jié)
- jQuery ajax分頁(yè)插件實(shí)例代碼
- 基于bootstrap3和jquery的分頁(yè)插件
- jQuery插件分享之分頁(yè)插件jqPagination
- jquery ajax分頁(yè)插件的簡(jiǎn)單實(shí)現(xiàn)
- 使用JQuery實(shí)現(xiàn)的分頁(yè)插件分享
- jQuery實(shí)現(xiàn)的分頁(yè)插件完整示例
相關(guān)文章
jquery對(duì)table做排序操作的實(shí)例演示
這篇文章主要介紹了jquery對(duì)table做排序操作的實(shí)例演示,通過(guò)添加自定義屬性data-sort-field-ftime及表頭添加onchange事件詳細(xì)講解了操作過(guò)程,需要的朋友可以參考下2017-08-08
jQuery插件擴(kuò)展實(shí)例【添加回調(diào)函數(shù)】
這篇文章主要介紹了jQuery插件擴(kuò)展的方法,結(jié)合實(shí)例形式分析了jQuery插件添加回調(diào)函數(shù)與事件觸發(fā)機(jī)制的相關(guān)操作技巧,需要的朋友可以參考下2016-11-11
通過(guò)jquery還原含有rowspan、colspan的table的實(shí)現(xiàn)方法
通過(guò)jquery還原含有rowspan、colspan的table的實(shí)現(xiàn)方法,學(xué)習(xí)jquery的朋友可以參考下2012-02-02
解決jquery無(wú)法找到其他父級(jí)子集問(wèn)題的方法
這篇文章主要為大家詳細(xì)介紹了解決jquery無(wú)法找到其他父級(jí)子集問(wèn)題的方法,感興趣的小伙伴們可以參考一下2016-05-05
jquery 插件實(shí)現(xiàn)圖片延遲加載效果代碼
前幾天上QQ的在線視頻網(wǎng)站,看到上面的影片列表頁(yè)的圖片有這樣一種效果:當(dāng)向下拉動(dòng)滾動(dòng)條時(shí)下面的圖片才開(kāi)始加載,就是說(shuō)它不會(huì)一下子把所有的圖片都加載出來(lái),拉動(dòng)滾動(dòng)條后用戶看到了才會(huì)顯示,這是一個(gè)很不錯(cuò)的用戶體驗(yàn)。2010-02-02
jQuery UI Autocomplete 1.8.16 中文輸入修正代碼
jQuery UI Autocomplete 1.8.16 中文輸入修正代碼,使用jQuery UI Autocomplete的朋友可以參考下2012-04-04
使用JQuery庫(kù)提供的擴(kuò)展功能實(shí)現(xiàn)自定義方法
如何沒(méi)有任何一個(gè)庫(kù)可以滿足所有的需求,可以使用JQuery庫(kù)提供的擴(kuò)展功能,下面有個(gè)示例,大家可以看看2014-09-09
jquery api參考 visualjquery 中國(guó)線路 速度快
jquery api參考 visualjquery 中國(guó)線路 速度快...2007-11-11

