分頁插件--根據Bootstrap Paginator改寫的js插件

来源:http://www.cnblogs.com/TIEDPAG/archive/2016/12/24/6197227.html
-Advertisement-
Play Games

剛剛出來實習,之前實習的公司有一個分頁插件,和後端的數據字典約定好了的,基本上是看不到內部是怎麼實現的,新公司是做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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.環境準備 下載mongoDB對Java支持的驅動包 驅動包下載地址:https://github.com/mongodb/mongo-java-driver/downloads 2.查詢集合中所有文檔 3.刪除集合中的文檔 4.向集合中插入文檔 5.更新集合中的文檔 ...
  • 1.概念 分片(sharding)是指將數據拆分,將其分散存在不同的機器上的過程。有時也用分區(partitioning)來表示這個概念。將數據分散到不同的機器上,不需要功能強大的大型電腦就可以儲存更多的數據,處理更多的負載。 2.分片 mongos就是一個路由伺服器,它會根據管理員設置的“片鍵” ...
  • 簡單選擇排序,是選擇排序演算法的一種。基本思想:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。由於在每次迴圈中,會對數值相等的元素改變位置,所以屬於非穩定排序。 如下圖所示: 對簡單選擇排序的優化方案,是採用二元選擇排序,即將其改進為每趟迴圈確定兩個元素 ...
  • 在微信上做一次推廣活動,頁面共計三個按鈕,需要分別統計點擊次數,pc上的相關統計用的是“百度統計”,因為H5活動頁的時效性等原因,並沒有使用百度統計,而是自己實現一個簡單的統計小方案:前端點擊時請求一個空白小gif圖,帶有參數,後端同事根據nginx請求日誌做統計,通過在cookie中存入一個不會重 ...
  • border-radius 圓角 參數可為像素 也可為百分比 當一個參數時 作用範圍為四個角 當兩個參數時 作用範圍為 左上右下 右上左下 當三個參數時 作用範圍為 左上 右上左下 右下 當四個參數時 作用範圍為 左上 右上 右下 左下 當參數中有'/'時 例如 100px/150px 則表示:X軸 ...
  • JavaScript中數據類型轉換總結 在js中,數據類型轉換分為顯式數據類型轉換和隱式數據類型轉換。 1, 顯式數據類型轉換 a:轉數字: 1)Number轉換: 代碼: var a = “123”; a = Number(a); 註意: a)如果轉換的內容本身就是一個數值類型的字元串,那麼將來在 ...
  • ▓▓▓▓▓▓ 大致介紹 下午看到了一個送聖誕禮物的小動畫,正好要快到聖誕節了,就動手模仿並改進了一些小問題 原地址:花式輪播 聖誕禮物傳送 思路:動畫中一共有五個禮物,他們平均分佈在屏幕中,設置最外邊的兩個禮物旋轉一定的角度並隱藏,動畫開始,每個禮物向右移動一定的位置,然後再把第五個禮物添加到第一個 ...
  • Httpster 這個網站聚合了世界各地最新最潮的網頁設計案例,展示了創意的設計,精心的策劃,優秀的排版。這些作品都按月份和類別進行了很好劃分,你可以方便的找到自己感興趣的網站案例。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...