JQuery分頁外掛使用心得
阿新 • • 發佈:2019-01-25
在修改別人的後臺程式碼的時候發現其使用的一款分頁外掛,於是看了其原始碼學習了一下,並將使用的心得整理了一下。
- 外掛的原始碼如下:
(function($, window, document) {
// 定義建構函式
function Paging(el, options) {
this.el = el;
this.options = {
pageNo: options.initPageNo || 1, // 初始頁碼
totalPages: options.totalPages || 1, //總頁數
totalCount: options.totalCount || '', // 條目總數
slideSpeed: options.slideSpeed || 0, // 緩動速度
jump: options.jump || false, // 支援跳轉
callback: options.callback || function() {} // 回撥函式
};
this.init();
}
// 給例項物件新增公共屬性和方法
Paging.prototype = {
constructor: Paging,
init: function() {
this .createDom();
this.bindEvents();
},
createDom: function() {
var that = this,
ulDom = '',
jumpDom = '',
content = '',
liWidth = 60, // li的寬度
totalPages = that.options.totalPages, // 總頁數
wrapLength = 0 ;
totalPages > 5 ? wrapLength = 5 * liWidth : wrapLength = totalPages * liWidth;
for (var i = 1; i <= that.options.totalPages; i++) {
i != 1 ? ulDom += '<li>' + i + '</li>' : ulDom += '<li class="sel-page">' + i + '</li>';
}
that.options.jump ? jumpDom = '<input type="text" placeholder="1" class="jump-text" id="jumpText"><button type="button" class="jump-button" id="jumpBtn">跳轉</button>' : jumpDom = '';
content = '<button type="button" id="firstPage" class="turnPage first-page">首頁</button>' +
'<button class="turnPage" id="prePage">上一頁</button>' +
'<div class="pageWrap" style="width:' + wrapLength + 'px">' +
'<ul id="pageSelect" style="transition:all ' + that.options.slideSpeed + 'ms">' +
ulDom +
'</ul></div>' +
'<button class="turnPage" id="nextPage">下一頁</button>' +
'<button type="button" id="lastPage" class="last-page">尾頁</button>' +
jumpDom +
'<p class="total-pages">共 ' +
that.options.totalPages +
' 頁</p>' +
'<p class="total-count">' +
that.options.totalCount +
'</p>';
that.el.html(content);
},
bindEvents: function() {
var that = this,
pageSelect = $('#pageSelect'), // ul
lis = pageSelect.children(), // li的集合
liWidth = lis[0].offsetWidth, // li的寬度
totalPages = that.options.totalPages, // 總頁數
pageIndex = that.options.pageNo, // 當前選擇的頁碼
distance = 0, // ul移動距離
prePage = $('#prePage'),
nextPage = $('#nextPage'),
firstPage = $('#firstPage'),
lastPage = $('#lastPage'),
jumpBtn = $('#jumpBtn'),
jumpText = $('#jumpText');
prePage.on('click', function() {
pageIndex--;
if (pageIndex < 1) pageIndex = 1;
handles(pageIndex);
})
nextPage.on('click', function() {
pageIndex++;
if (pageIndex > lis.length) pageIndex = lis.length;
handles(pageIndex);
})
firstPage.on('click', function() {
pageIndex = 1;
handles(pageIndex);
})
lastPage.on('click', function() {
pageIndex = totalPages;
handles(pageIndex);
})
jumpBtn.on('click', function() {
var jumpNum = parseInt(jumpText.val().replace(/\D/g, ''));
if (jumpNum && jumpNum >= 1 && jumpNum <= totalPages) {
pageIndex = jumpNum;
handles(pageIndex);
jumpText.val(jumpNum);
}
})
lis.on('click', function() {
pageIndex = $(this).index() + 1;
handles(pageIndex);
})
function handles(pageIndex) {
lis.removeClass('sel-page').eq(pageIndex - 1).addClass('sel-page');
if (totalPages <= 5) {
that.options.callback(pageIndex);
return false;
}
if (pageIndex >= 3 && pageIndex <= totalPages - 2) distance = (pageIndex - 3) * liWidth;
if (pageIndex == 2 || pageIndex == 1) distance = 0;
if (pageIndex > totalPages - 2) distance = (totalPages - 5) * liWidth;
pageSelect.css('transform', 'translateX(' + (-distance) + 'px)');
pageIndex == 1 ? firstPage.attr('disabled', true) : firstPage.attr('disabled', false);
pageIndex == 1 ? prePage.attr('disabled', true) : prePage.attr('disabled', false);
pageIndex == totalPages ? lastPage.attr('disabled', true) : lastPage.attr('disabled', false);
pageIndex == totalPages ? nextPage.attr('disabled', true) : nextPage.attr('disabled', false);
that.options.callback(pageIndex);
}
handles(that.options.pageNo); // 初始化頁碼位置
}
}
$.fn.paging = function(options) {
return new Paging($(this), options);
}
})(jQuery, window, document);
以及配合使用的css檔案程式碼如下
* {
margin: 0;
padding: 0;
list-style: none;
}
.fl {
float: left;
}
.box {
text-align: center;
overflow: hidden;
margin: 20px 0 0 0;
height: auto !important;
}
.box button {
padding: 0 10px;
margin: 0 10px;
height: 40px;
float: left;
cursor: pointer;
border: 1px solid #ebebeb;
background-color: #ffffff;
}
.box .first-page,
.box .last-page {
margin: 0;
}
.box .pageWrap {
height: 40px;
float: left;
overflow: hidden;
}
.box .pageWrap ul {
width: 100000px;
height: 40px;
float: left;
}
.box .pageWrap ul li {
width: 60px;
height: 40px;
border: 1px solid #ebebeb;
line-height: 40px;
box-sizing: border-box;
cursor: pointer;
float: left;
}
.box .pageWrap ul .sel-page {
background-color: #E6E6FA;
}
.box .jump-text {
width: 60px;
height: 40px;
box-sizing: border-box;
text-align: center;
margin: 0 5px;
float: left;
}
.box .jump-button {
margin: 0;
float: left;
}
.box .total-pages,
.box .total-count {
margin-left: 10px;
float: left;
font-size: 14px;
padding-top: 11px;
}
當你在專案中引入了以上檔案後,我們就可以開始使用了!如何使用呢?注意看外掛原始碼的最後幾行:
$.fn.paging = function(options) {
return new Paging($(this), options);
}
這裡我們舉個例子大家一看就明白了:
<div class="box">分頁內容要顯示的地方</div>
<script>
$(function(){
var option={
pageNo: 1, // 初始頁碼
totalPages: 2, //總頁數
totalCount: 8, // 條目總數
slideSpeed: 600, // 緩動速度
jump:true, // 支援跳轉
callback: function(page) {
//根據當前頁查資料
......
} // 回撥函式
}
$(".box").paging(option)
})
</script>
設定好這些分頁的基本引數後,顯示的效果如下圖
上面的程式碼大家不難看懂,這裡簡單介紹下回調函式。當我們點選首頁、上下頁或者具體頁數時都會觸發,並且返回當前頁數,這點通過檢視原始碼裡的handles函式也可以看出。
將返回的頁數引數這裡為page,傳入查詢函式裡(如果有查詢條件,將查詢條件一併傳入)重新進行查詢得到 對應資料。
基本的使用過程就是這樣啦,只要熟悉分頁的基本流程,使用起來還是很方便的。