1. 程式人生 > >JQuery分頁外掛使用心得

JQuery分頁外掛使用心得

在修改別人的後臺程式碼的時候發現其使用的一款分頁外掛,於是看了其原始碼學習了一下,並將使用的心得整理了一下。
- 外掛的原始碼如下:

(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">共&nbsp;' + that.options.totalPages + '&nbsp;頁</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,傳入查詢函式裡(如果有查詢條件,將查詢條件一併傳入)重新進行查詢得到 對應資料。

基本的使用過程就是這樣啦,只要熟悉分頁的基本流程,使用起來還是很方便的。