推薦教學:BootStrap教學
寫前端都會面臨的一個問題就是分頁,如果是純js分頁也是可以的,只是可能程式碼量比較大,所以今天寫一個關於用bootstrap框架分頁的例子,希望以後可以幫助到一些對這方面比較頭疼的碼農。
首先需要明確的一點是,哪些數據是需要分頁的,單從數據顯示上其實是沒有必要分頁的,因為頁面是可以顯示的出來的,但是作為一個相對比較合格的前端,你首先要考慮的不只是這個功能是不是可以實現,而是要考慮使用者體驗是不是好的,在既有功能上如果可以更多的考慮使用者體驗的問題,那麼才可以算是相對比較合格的前端工程師。
1、首先我們將需要用的資料準備好(這個一般是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" } ] } }
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動態的畫出來,這樣才可以實現取出來的資料是可以分頁的,但是畫表格的前提是你要可以拿到數據對不對,所以接下來應該是拿數據,而不是急著畫表格,因為沒有數據的時候你的表格即使是畫出來了,也是顯示不出來的,那我們開始拿資料:
3、我們寫一個函數來取資料:##
/*将数据取出来*/ 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) }
4、載入分頁的js(bootstrap的分頁js)
<link href="../../css/font-awesome.min.css" rel="stylesheet" /> <link href="../../css/bootstrap.min.css" rel="stylesheet" /> <link href="../../css/templatemo-style.css" rel="stylesheet" /> <link href="../../css/layui/css/layui.css" rel="stylesheet" /> <script src="../../js/bootstrap.min.js" type="text/javascript"></script> <script src="../../js/jquery-1.8.3-min.js" type="text/javascript"></script> <script src="../../js/jquery.min.js" type="text/javascript"></script> <script src="../../js/extendPagination.js" type="text/javascript"></script> <script src="../../js/layui/lay/dest/layui.all.js" type="text/javascript"></script> <!--引如测试数据的js--> <script src="../../js/testcode.js" type="text/javascript"></script>上面的這些js,css都可以去cdn上面找到,除了testcode,在最上面,就是我們載入資料的js。
5、下面就是將分頁的程式碼寫上:#
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) } }); }載入以後的效果是這樣的:
6、這個時候就是已經基本上將資料處理好了,只是沒有將資料放進去,最後我們將資料放進去就可以了,(我的寫法不建議借鑒,很多現成的循環畫表格的方法,我是原生的拼接字符串寫的,不嫌麻煩的可以自己拼一下,畢竟不管是什麼框架,最底層的還是這樣的實作原理)
/*创建的是一个表格,并将数据放进去*/ 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" οnclick=checkproject(' + dataLIst[i].id + ',"1")>同意' + '</button> <button class="templatemo-edit-btn" οnclick=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取資料的時候,然後就是這個分頁其實是後端給資料的時候就已經分好的,我們只是把資料拿到,告訴他頁碼,他給我們對應頁碼的數據,前端如果將所有的數據全部拿出來,是不是不可以分頁呢?不是的,也是可以的,只是這樣的分頁性能會很差,因為每次你拿到的數據都是數據庫查詢所有的數據拿出來的數據,這樣對數據庫的壓力太大了,我們一般叫這種分頁為假分頁。
以上是bootstrap怎麼實現分頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!