jQuery從零開(kāi)始做一個(gè)分頁(yè)組件功能示例
本文實(shí)例講述了jQuery從零開(kāi)始做一個(gè)分頁(yè)組件功能。分享給大家供大家參考,具體如下:
開(kāi)始一個(gè)組件,毫無(wú)目的的寫(xiě)代碼是一個(gè)不好的習(xí)慣,要經(jīng)歷 分析 => 抽象 => 實(shí)現(xiàn) => 應(yīng)用 四個(gè)階段。
組件DEMO地址:https://github.com/CaptainLiao/zujian/tree/master/pagination
- 分析需求
當(dāng)前頁(yè)碼顯示前后三頁(yè),以及在兩端顯示上一頁(yè)、下一頁(yè)
未顯示的地方用 ‘...'代替
舉個(gè)栗子:
假設(shè)總共有30頁(yè)
當(dāng)前為第一頁(yè):1 2 3 4 ... 30 下一頁(yè)
當(dāng)前為第二頁(yè):上一頁(yè) 1 2 3 4 5 ... 30 下一頁(yè)
當(dāng)前為第三頁(yè):上一頁(yè) 1 2 3 4 5 6 ... 30 下一頁(yè)
.
當(dāng)前為第6頁(yè):上一頁(yè) 1 ... 3 4 5 6 7 8 9 ... 30 下一頁(yè)
.
當(dāng)前為第29頁(yè):上一頁(yè) 1 ... 26 27 28 29 30 下一頁(yè)
當(dāng)前為第30頁(yè):上一頁(yè) 1 ... 27 28 29 30
- 抽象
分析上面的例子,發(fā)現(xiàn)決定輸出的因素有兩個(gè):當(dāng)前頁(yè)碼和總頁(yè)數(shù)。
于是,我們?cè)O(shè)定一個(gè)函數(shù)用來(lái)表示當(dāng)前頁(yè)碼的顯示內(nèi)容:
/** * @param {Number} page 當(dāng)前頁(yè) * @param {Number} totalPage 總頁(yè)數(shù) */ function pagination(page, totalPage) { var str = ''; // todo... return str; } // 運(yùn)行函數(shù),打印出值 var ret = pagination(4, 30) console.log(ret) >上一頁(yè) 1 2 3 4 5 6 7 ... 30 下一頁(yè)
- 實(shí)現(xiàn)
輸入和輸出都有了,接著正式開(kāi)始擼:
function pagination(page, totalPage) { var str = page; // 這里實(shí)現(xiàn)當(dāng)前頁(yè)面顯示前后三項(xiàng)功能 for(var i=1; i< totalPage; i++) { if(page-i>1) { str = page-i +' '+ str; } if(page + i < totalPage) { str = str + ' ' + (page+i) } } // 以page為中心,向左右擴(kuò)展 // 向左,先判斷當(dāng)前page向左的第四個(gè)數(shù)是否大于 1 if(page-4 > 1) { str = '... ' + page; } // 繼續(xù)向左判斷 if(page >1) { str = "上一頁(yè)" + '... ' +1 +' ' +str; } // 向右,判斷當(dāng)前page向右的第四個(gè)數(shù)字是否小于 totalPage if(page + 4 < totalPage) { str = '... '+ str; } if(page < totalPage) { str = str +' ' + totalPage +' '+ '下一頁(yè)'; } return str; }
現(xiàn)在,我們可以執(zhí)行下面的函數(shù),取得我們想要的結(jié)果:
var total = 30; for(var i = 1; i< total; i++) { var ret = showPage(i, total); console.log(ret) }
至此,我們已經(jīng)實(shí)現(xiàn)了分頁(yè)的邏輯。
- 應(yīng)用
接下來(lái)的應(yīng)用就非常簡(jiǎn)單了,不外乎是給str 加一些標(biāo)簽和class,于是我們就得到了一個(gè)分頁(yè)組件:
HTML:
<ul id="pagination-list" class="clearfix2"> </ul>
javascript:
function pagination(page, totalPage) { var str = '<li class="page-active">'+page+'</li>'; for(var i=1; i<=3; i++) { if(page - i > 1) { str = '<li class="page-item">'+(page-i)+'</li>' +' '+ str; } if(page + i < totalPage) { str = str +" "+'<li class="page-item">'+(page+ i)+'</li>' } } if(page-4 >1) { str = '<li class="page-item">... </li>' +str; } if (page >1) { str= '<li class="page-up">上一頁(yè)</li>'+ ' '+'<li class="page-item">1</li>' +' '+ str; } if(page+4< totalPage) { str = str+ '<li class="page-item"> ...</li>'; } if(page < totalPage) { str = str + " " +'<li class="page-item">'+totalPage+'</li>' +" " +'<li class="page-down">下一頁(yè)</li>' } return str; } var totalPage = 30; var str = pagination(1, totalPage); var wrap = $("#pagination-list"); // 這里引用了 jQuery wrap.html(str) .on('click', '.page-item', function () { var cur = parseInt($(this).text()); wrap.html(pagination(cur, totalPage)); });
看看效果吧:
目前來(lái)說(shuō),進(jìn)展順利,但是!還有很多需要優(yōu)化的地方:樣式固定,不能自由更改;初始化和交互混雜在一起,沒(méi)有對(duì)代碼進(jìn)行封裝...
又經(jīng)過(guò)一番折騰,這個(gè)分頁(yè)組件終于完成,下載demo:
https://github.com/CaptainLiao/zujian/tree/master/pagination
現(xiàn)在,我們可以這樣調(diào)用它:
<script> // #pagination-list 是組件的父容器,50 是總頁(yè)數(shù)。 $(function () { $("#pagination-list").pagination(50); }) </script>
是不是很酸爽呢?
如果繼續(xù)擴(kuò)展,我們還可以給組件更多的樣式選擇......
更多關(guān)于jQuery相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《jQuery擴(kuò)展技巧總結(jié)》、《jQuery常用插件及用法總結(jié)》、《jQuery切換特效與技巧總結(jié)》、《jQuery遍歷算法與技巧總結(jié)》、《jQuery常見(jiàn)經(jīng)典特效匯總》、《jQuery動(dòng)畫(huà)與特效用法總結(jié)》及《jquery選擇器用法總結(jié)》
希望本文所述對(duì)大家jQuery程序設(shè)計(jì)有所幫助。
- 基于jQuery封裝的分頁(yè)組件
- jQuery Ajax自定義分頁(yè)組件(jquery.loehpagerv1.0)實(shí)例詳解
- 用jQuery中的ajax分頁(yè)實(shí)現(xiàn)代碼
- JQuery+Ajax無(wú)刷新分頁(yè)的實(shí)例代碼
- 基于jQuery的實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)控件
- jQuery中jqGrid分頁(yè)實(shí)現(xiàn)代碼
- 基于JQuery的Pager分頁(yè)器實(shí)現(xiàn)代碼
- jQuery EasyUI API 中文文檔 - Pagination分頁(yè)
- jQuery Pagination Ajax分頁(yè)插件(分頁(yè)切換時(shí)無(wú)刷新與延遲)中文翻譯版
- jQuery EasyUI datagrid實(shí)現(xiàn)本地分頁(yè)的方法
- jQuery DataTables插件自定義Ajax分頁(yè)實(shí)例解析
- jQuery學(xué)習(xí)筆記——jqGrid的使用記錄(實(shí)現(xiàn)分頁(yè)、搜索功能)
相關(guān)文章
Jquery仿淘寶京東多條件篩選可自行結(jié)合ajax加載示例
仿淘寶京東多條件篩選可自行結(jié)合ajax加載,使用Jquery簡(jiǎn)單實(shí)現(xiàn),具體如下,喜歡的朋友可以參考下2013-08-08jquery中ajax調(diào)用json數(shù)據(jù)的使用說(shuō)明
jquery里提供了便捷的ajax運(yùn)用,下面總結(jié)我自己的一些經(jīng)驗(yàn)2011-03-03jQuery中操控hidden、disable等無(wú)值屬性的方法
在實(shí)現(xiàn)一些表單提交頁(yè)面時(shí)會(huì)放置若干隱藏屬性,下面為大家介紹下jQuery中如何操控hidden、disable等無(wú)值屬性,感興趣的朋友不要錯(cuò)過(guò)2014-01-01jquery 簡(jiǎn)單導(dǎo)航實(shí)現(xiàn)代碼
jquery簡(jiǎn)單導(dǎo)航實(shí)現(xiàn)代碼,需要的朋友可以參考下。2009-09-09jQuery學(xué)習(xí)筆記 操作jQuery對(duì)象 CSS處理
在對(duì)class屬性的操作中,實(shí)際上已經(jīng)改變?cè)貥邮搅?,但這些都是根據(jù)已設(shè)定的CSS規(guī)則間接生效的。因此我們有必要使用更為直接的方式來(lái)改變?cè)仍O(shè)定好了的CSS規(guī)則2012-09-09jQuery鼠標(biāo)滑過(guò)橫向時(shí)間軸樣式(代碼詳解)
這篇文章主要介紹了jQuery鼠標(biāo)滑過(guò)橫向時(shí)間軸樣式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11