剛剛出來實習,之前實習的公司有一個分頁插件,和後端的數據字典約定好了的,基本上是看不到內部是怎麼實現的,新公司是做WPF的,好像對於ASP.NET的東西不多,導師扔了一個小系統給我和另一個同事,指了兩種框架的方案就讓我們自己做了。。。 剛開始在網上找了一下,覺得bootstrap-paginator ...
剛剛出來實習,之前實習的公司有一個分頁插件,和後端的數據字典約定好了的,基本上是看不到內部是怎麼實現的,新公司是做WPF的,好像對於ASP.NET的東西不多,導師扔了一個小系統給我和另一個同事,指了兩種框架的方案就讓我們自己做了。。。
剛開始在網上找了一下,覺得bootstrap-paginator的api暴露出來,修改一下就可以做成之前實習公司的那種了,但是覺得沒有跳轉,很奇怪,想要一個,就動手在github上把源碼拿下來了,不得不說,這代碼寫得真是比我這些實習碼農好太多。(之前實習公司的組長臨走之前給了我幾個意見,其中就有讓我多上全球最大的男性交友社區github多去看看 - - )這裡給一下地址吧。bootstrap-paginator下載地址
看了一些網上對於bootstrap-paginator插件的使用教程,對於使用起來還是沒太大問題的,自己在改代碼的時候發現都不太全。
首先,插件有調節大小、調節浮動位置的功能,但是我用的是bootstrap3,在bootstrap3中這些特性都不支持。。
後來,我就找了一下別的樣式(前端無能,十分佩服前端大牛,硬是能把頁面組織起來),效果大概就是:
給一下這個html代碼吧。
<div id="pager" class="ui-paging-container"> <ul> <li class="ui-pager ui-pager-disabled" data-original-title="" title=""> <a><<</a> </li> <li class="ui-pager ui-pager-disabled" data-original-title="" title=""> <a><</a> </li> <li class="ui-pager focus" data-original-title="" title=""> <a>1</a> </li> <li class="ui-pager" data-original-title="" title=""> <a>2</a> </li> <li class="ui-pager" data-original-title="" title=""> <a>3</a> </li> <li class="ui-pager" data-original-title="" title=""> <a>4</a> </li> <li class="ui-pager" data-original-title="" title=""> <a>5</a> </li> <li class="ui-paging-ellipse" data-original-title="" title="">...</li> <li class="ui-pager" data-original-title="" title=""> <a>10</a> </li> <li class="ui-pager" data-original-title="" title=""> <a>></a> </li> <li class="ui-pager" data-original-title="" title=""> <a>>></a> </li> <li class="ui-paging-toolbar" data-original-title="" title=""> <input class="ui-paging-count" type="text" id="txt_turn"> <a href="javascript:void(0)" id="btn_turn">跳轉</a> </li> </ul> </div>
樣式代碼很簡單,如果有人想用的話,可以修改一下我的樣式代碼。。真的好像不怎麼好看。
.ui-paging-container {color: #666; font-size: 15px;} .ui-paging-container ul {overflow: hidden; text-align: center;} .ui-paging-container ul, .ui-paging-container li {list-style: none;} .ui-paging-container li {display: inline-block;padding: 3px 6px;margin-left: 5px;color: #666;} .ui-paging-container li a {color: #666; text-decoration: none; } .ui-paging-container li.ui-pager {cursor: pointer;border: 1px solid #ddd;border-radius: 2px;} .ui-paging-container li.ui-pager:hover, .ui-paging-container li.focus { background-color: #288df0;color: #FFFFFF;} .ui-paging-container li.ui-paging-ellipse {border: none;} .ui-paging-container li.ui-paging-toolbar {padding: 0;} .ui-paging-container li.ui-paging-toolbar select {height: 25px;border: 1px solid #ddd;color: #666;} .ui-paging-container li.ui-paging-toolbar input {line-height: 20px;height: 23px;padding: 0;border: 1px solid #ddd;text-align: center;width: 33px;margin: 0 0 0 5px;vertical-align: middle;} .ui-paging-container li.ui-paging-toolbar a {vertical-align: middle; text-decoration: none;display: inline-block;height: 23px;border: 1px solid #ddd;vertical-align: top;border-radius: 2px;line-height: 20px;padding: 0 3px;cursor: pointer;margin-left: 5px;color: #666;} .ui-paging-container li.ui-pager-disabled, .ui-paging-container li.ui-pager-disabled:hover {background-color: #f6f6f6;cursor: not-allowed;border: none;color: #ddd;} .ui-paging-container li.ui-pager-disabled a { color: #ddd;text-decoration: none;}
看了樣式的人應該發現了吧,原本是有一個選擇框的,被我刪了,選擇框是用來控制頁面顯示信息的條數,因為這個控制目前不需要前端有,所以我取消了。
好了,說說怎麼調用吧。
屬性 | 預設值 | 說明 |
containerClass | string,預設值為:'' | 為最外層div增加自定義樣式 |
itemContainerClass | string|function,預設值為:null | 為li標簽增加自定義樣式 |
itemContentClass | string|function,預設值為:null | 為a標簽添加自定義樣式 |
currentPage | Number,預設值為:1 | 定義插件初始化後顯示的頁 |
ShowPagesNum | Number,預設值為:5 | 定義插件顯示的按鈕數量(不包括首頁、末頁、上一頁、下一頁等按鈕) |
totalPages | Number,預設值為:1 | 定義插件總頁數 |
pageUrl | string|function,預設值為:null | 為a標簽加上href屬性 |
onPageClicked | string|function,預設值為:null |
函數四個參數:even、originalEvent、type、 page,type的值為:first|prev|next|last| page|turn|ellipsis,page的值為單擊按鈕時跳轉的頁碼,current是跳轉前 的頁碼 |
onPageChanged | string|function,預設值為:null |
函數四個參數:even、originalEvent、type、 page,type的值為:first|prev|next|last| page|turn|ellipsis,page的值為單擊按鈕時跳轉的頁碼,current是跳轉前 的頁碼 |
useBootstrapTooltip | boolean,預設值為:false | 是否使用bootstrap的提示框插件 |
shouldShowPage | function,預設值為:true |
函數三個參數:type, page, current,type的值為:first|prev|next|last| page|turn|ellipsis,page的值為單擊按鈕時跳轉的頁碼,current是跳轉前 的頁碼 |
itemTexts | function |
可以修改頁碼的顯示,如把type為first的文字改成'首頁' 三個參數:type, page, current |
tooltipTitles | function |
修改頁碼元素的title屬性,預設有一個簡單的實現, 三個參數:type, page, current |
bootstrapTooltipOptions | object |
這個是把title註入到bootstrap的tooltip插件的模板 |
大部分都還是保持和bootstrap-paginator插件的屬性。
下麵怎麼調用呢?給一個html的實例吧。
首先把定義的樣式拿進來,就是上面那個,存一個文件,引入(也可以和你自己的css文件放在一起,可以減少http請求次數)。
<link href="~/Content/css/style.css" rel="stylesheet" />
這些都是基於jquery的插件,並且要1.8以上的版本。
<script src="~/Scripts/jquery-1.10.2.js"></script>
接下來就是引用我們最重要的js文件了。
<script src="~/Scripts/mypager.js"></script>
html中放一個div,這個div就是接下來要生成分頁控制項的父元素。記住一定是要div,bootstrap-paginator中bootstrap2是用div,bootstrap3是用ul。這裡因為我們自己寫的樣式,就被我改成了必須是div。
<div id="pager"></div>
寫一個簡單的調用腳本。
var option = { currentPage: 1, totalPages: 10, ShowPagesNum: 5 }; $('#pager').myPager(option);
HTML里的調用就到這裡了。我用的是ASP.NET MVC,所以直接用Razor引擎把ViewData或者ViewBag的數據裝載進js里就好了。當然,既然打算這樣用了,最好在後端直接寫一個類,我給個例子。
public class Pager { /// <summary> /// 當前頁碼 /// </summary> public int PageIndex { get; set; } /// <summary> /// 總頁數 /// </summary> public int TotalPages { get; set; } /// <summary> /// 每頁展示信息數 /// </summary> public int PageSize { get; set; } /// <summary> /// 前端分頁調用的js方法名 /// </summary> public string PagerFun { get; set; } public Pager() { } public Pager(string pager) { PagerFun = pager; } }
前面幾個屬性都好理解,那個PagerFun是什麼呢?在插件的屬性中,有幾個函數,比如:pageUrl、onPageClicked等,後端如果想在不同分頁里調用不同分頁按鈕點擊事件,只需要把對應的js函數名在Razor引擎中放進插件聲明時的參數就好了。這裡給個例子吧。
C# MVC控制器:
public ActionResult Index() { Pager pager = new Pager("test"); pager.PageIndex = 1; pager.PageSize = 10; pager.TotalPages = 10; return View(pager); }
ps:這裡使用了剛剛上面那個Pager類。
CSHTML:
@{ Layout = null; var pager = Model as WebApplication4.Models.Pager; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <link href="~/Content/css/style.css" rel="stylesheet" /> <script src="~/Scripts/jquery-1.10.2.js"></script> <title>Index</title> </head> <body> <div id="pager"> </div> <script src="~/Scripts/mypager.js"></script> <script> var test = function (even,originalEvent,type, page) { alert(page); }; var option = { currentPage: @pager.PageIndex, totalPages: @pager.TotalPages, ShowPagesNum: 5, onPageClicked:@(pager.PagerFun) }; $('#pager').myPager(option); </script> </body> </html>
主要是onPageClicked:@(pager.PagerFun)這一句,在Razor引擎頂部我們聲明瞭pager變數,從控制器中傳到視圖層,強轉之後把PagerFun變數賦給了插件的onPageClicked屬性,插件內部識別它是一個函數就調用了,例子中PagerFun的值為"test",效果是單擊哪個按鈕就彈出按鈕代表的頁碼。
這隻是其中一個函數,onPageChanged等都是可以的。第一次寫,自己的js功底也並不是很深,藉著bootstrap-paginator作者的源碼學習了很多,代碼也寫得很優美!
點擊此處下載js文件。
2016-12-19 13:54:57