bootstrap實現分頁(例項)
寫前端都會面臨的一個問題就是分頁,如果是純js分頁也是可以的,只是可能程式碼量比較大,所以今天寫一個關於用bootstrap框架分頁的例子,希望以後可以幫助到一些對這方面比較頭疼的碼農。
首先需要明確的一點是,哪些資料是需要分頁的,單從資料顯示上其實是沒有必要分頁的,因為頁面是可以顯示的出來的,但是作為一個相對比較合格的前端,你首先要考慮的不僅僅是這個功能是不是可以實現,而是要考慮使用者體驗是不是好的,在既有功能上如果可以更多的考慮使用者體驗的問題,那麼才可以算是一個相對比較合格的前端工程師。
先看渲染圖:
這個是一個專案中的例子,今天就做以這個為例子,做一下
首先我們將需要用的資料準備好(這個一般是ajax請求到的資料,現在我們直接放到一個js裡面,載入js的時候直接取出資料)
- var testboke = {
- "code":200,
- "message":null,
- "data":{
- "total":17,//總條數
- "size":10,//分頁大小-預設為0
- "pages":2,//總頁數
- "current":1,//當前頁數
- "records":[//author-riverLethe-double-slash-note資料部分
- {
- "id":17,//專案id
- "userName":"Night夜",//發起人名稱
- "companyName"
:"康佰裕",//發起人公司名稱 - "ptypeName":"13",//發起專案類別
- "pask":"13",
- "pname":"13",
- "pdesc":"13"
- },
- {
- "id":16,
- "userName":"Night夜",
- "companyName":"康佰裕",
- "ptypeName":"12",
- "pask"
:"12", - "pname":"12",
- "pdesc":"12"
- },
- {
- "id":15,
- "userName":"BB機",
- "companyName":"北京電影",
- "ptypeName":"11",
- "pask":"11",
- "pname":"11",
- "pdesc":"11"
- },
- {
- "id":14,
- "userName":"BB機",
- "companyName":"北京電影",
- "ptypeName":"9",
- "pask":"9",
- "pname":"9",
- "pdesc":"9"
- },
- {
- "id":13,
- "userName":"BB機",
- "companyName":"北京電影",
- "ptypeName":"7",
- "pask":"7",
- "pname":"7",
- "pdesc":"7"
- },
- {
- "id":12,
- "userName":"Night夜",
- "companyName":"康佰裕",
- "ptypeName":"6",
- "pask":"6",
- "pname":"6",
- "pdesc":"6"
- },
- {
- "id":11,
- "userName":"BB機",
- "companyName":"北京電影",
- "ptypeName":"5",
- "pask":"5",
- "pname":"5",
- "pdesc":"5"
- },
- {
- "id":10,
- "userName":"Night夜",
- "companyName":"康佰裕",
- "ptypeName":"4",
- "pask":"4",
- "pname":"4",
- "pdesc":"4"
- },
- {
- "id":9,
- "userName":"BB機",
- "companyName":"北京電影",
- "ptypeName":"3",
- "pask":"3",
- "pname":"3",
- "pdesc":"3"
- },
- {
- "id":8,
- "userName":"Night夜",
- "companyName":"康佰裕",
- "ptypeName":"2",
- "pask":"2",
- "pname":"2",
- "pdesc":"2"
- }
- ]
- }
- }
接下來畫頁面的表格:
- <body>
- <div class="templatemo-content col-1 light-gray-bg">
- <div class="templatemo-top-nav-container">
- <div class="row">
- <nav class="templatemo-top-nav col-lg-12 col-md-12">
- <li>
- <a href="">發起專案列表管理</a>
- </li>
- </nav>
- </div>
- </div>
- <!--正文部分-->
- <div style="background: #E8E8E8;height: 60rem;">
- <div class="templatemo-content-container">
- <div class="templatemo-content-widget no-padding">
- <!--表頭-->
- <div class="panel-heading templatemo-position-relative">
- <h2 class="text-uppercase">發起專案列表</h2></div>
- <div class="panel panel-default table-responsive" id="mainContent">
- </div>
- </div>
- </div>
- </div>
- <div class="pagination-wrap" id="callBackPager">
- </div>
- <footer class="text-right">
- <p>Copyright © 2018 Company Name | Designed by
- <a href="http://www.csdn.com" target="_parent">csdn</a>
- </p>
- </footer>
- </body>
這個時候也頁面上是沒有任何的元素的,因為我們需要的是將頁面上的表格用js動態的畫出來,這樣才可以實現取出來的資料是可以分頁的,但是畫表格的前提是你要可以拿到資料對不對,所以接下來應該是拿資料,而不是急著畫表格,因為沒有資料的時候你的表格即使是畫出來了,也是顯示不出來的,那麼我們開始拿資料:
我們寫一個函式取資料:
- /*將資料取出來*/
- function data(curr, limit) {
- //console.log("tot:"+totalCount)
- /*拿到總資料*/
- totalCount = testboke.data.total; //取出來的是資料總量
- dataLIst = testboke.data.records; // 將資料放到一個數組裡面(dataLIst 還未宣告,莫著急)
- createTable(curr, limit, totalCount);
- console.log("tot:"+totalCount)
- }
拿到資料以後怎麼做,分頁,是的,不是急著將資料放到表格裡面,先分頁,ok我們載入分頁的js(bootstrap的分頁js)
- <linkhref="../../css/font-awesome.min.css"rel="stylesheet" />
- <linkhref="../../css/bootstrap.min.css"rel="stylesheet" />
- <linkhref="../../css/templatemo-style.css"rel="stylesheet" />
- <linkhref="../../css/layui/css/layui.css"rel="stylesheet" />
- <scriptsrc="../../js/bootstrap.min.js"type="text/javascript"></script>
- <scriptsrc="../../js/jquery-1.8.3-min.js"type="text/javascript"></script>
- <scriptsrc="../../js/jquery.min.js"type="text/javascript"></script>
- <scriptsrc="../../js/extendPagination.js"type="text/javascript"></script>
- <scriptsrc="../../js/layui/lay/dest/layui.all.js"type="text/javascript"></script>
- <!--引如測試資料的js-->
- <scriptsrc="../../js/testcode.js"type="text/javascript"></script>
上面的這些js,css都可以去cdn上面找到,除了testcode,在最上面,就是我們載入資料的js。
下面就是將分頁的程式碼寫上:
- var currPage = 1;
- var totalCount;
- var dataLIst = [];
- window.onload = function() {
- /*取到總條數*/
- /*每頁顯示多少條 10條*/
- var limit = 10;
- data(currPage, limit)
- //console.log(totalCount)
- createTable(1, limit, totalCount);
- $('#callBackPager').extendPagination({
- totalCount: totalCount,
- limit: limit,
- callback: function(curr, limit, totalCount) {
- data(curr, limit)
- }
- });
- }
載入以後的效果是這樣的:
這個時候就是已經基本將資料處理好了,只是沒有將資料放進去,最後我們將資料放進去就可以了,(我的寫法不建議借鑑,很多現成的迴圈畫表格的方法,我是原生的拼接字串寫的,不嫌麻煩的可以自己拼一下,畢竟不管是什麼框架,最底層的還是這樣的實現原理)
- /*建立的是一個表格,並將資料放進去*/
- function createTable(currPage, limit, total) {
- var html = [],
- showNum = limit;
- if(total - (currPage * limit) < 0) showNum = total - ((currPage - 1) * limit);
- html.push(' <table class="table table-striped table-bordered templatemo-user-table" style="margin-left: 0;">');
- html.push(' <thead><tr><th>序號</th><th>專案名稱</th><th>類別</th><th>發起人</th><th>單位</th><th>詳情</th><th>操作</th></tr></thead><tbody>');
- for(var i = 0; i < showNum; i++) {
- html.push('<tr>');
- html.push('<td>' + dataLIst[i].id + '</td>');
- html.push('<td>' + dataLIst[i].pname + '</td>');
- html.push('<td>' + dataLIst[i].ptypeName + '</td>');
- html.push('<td>' + dataLIst[i].userName + '</td>');
- html.push('<td>' + dataLIst[i].companyName + '</td>');
- html.push('<td><a href="project_details_init.html?id='+dataLIst[i].id+'" class="templatemo-edit-btn">詳情</a></td>');
- html.push('<td><button class="templatemo-edit-btn" onclick=checkproject(' + dataLIst[i].id + ',"1")>同意' +
- '</button> <button class="templatemo-edit-btn" onclick=checkproject(' + dataLIst[i].id + ',"2")>拒絕</button></td>');
- html.push('</tr>');
- }
- html.push('</tbody></table>');
- var mainObj = $('#mainContent');
- mainObj.empty();
- mainObj.html(html.join(''));
- }
ok,到這裡基本就已經將一個頁面載入資料和分頁處理結束了,是不是很簡單,其實本來就不難,只是很多的時候我們不想去測試,當然中間取資料的地方是ajax來處理的,但是為了給你們舉例子,我只能將ajax那塊取資料的地方直接寫到js裡面,這個資料是動態的,用ajax取資料的時候,然後就是這個分頁其實是後端給資料的時候就已經分好的,我們只是將資料拿到,告訴他頁碼,他給我們對應頁碼的資料,前端如果將所有的資料全部拿出來,是不是不可以分頁呢?不是的,也是可以的,只是這樣的分頁效能會很差,因為每次你拿到的資料都是資料庫查詢所有的資料拿出來的資料,這樣對資料庫的壓力太大了,我們一般叫這種分頁為假分頁。
ok最後簡單的總結一下,分頁其實不難,難在怎麼理解這個思路,我看了很多的分頁的程式碼,有的是原生的js分頁,是可以實現的,但是隻是對於開發者來說是一件得不償失的事情,畢竟前人是給我們提供的有辦法的,我們是沒必要糾結那些,程式碼怎麼簡單快速的實現是最好的方式。
小生不才,有自己的網站搞機族,關於手機的,感興趣的可以看看,交流一下心得。