先来看看效果:

对于前端分页,关键是思路,和分页算法。本想多说两句,可又觉得没什么可说的,看代码吧:

如何使用?

  1. $("#pging").zPagination({
  2. 'navEvent':function(){
  3. console.log('取数据Ajax');
  4. }
  5. });

JS代码

  1. //分页Pagination
  2. ; (function ($, window) {
  3. var defaults = {
  4. rowCount: 400, //总数据行数
  5. navPage: 10, //每次显示多少页导航
  6. pageSize: 10, //每页多少条数据
  7. currentPage: 20, //当前是第几页
  8. showRowsCount: true, //是否显示总数据数
  9. showGoto: false, //是否有跳转功能
  10. navUrl: '', //点击页后所跳转到的URL,用于非Ajax()方式:/Home/Index.aspx?pageIndex=
  11. ajaxUrl: '', //点击页后从哪个URL取数据,用于Ajax()方式:/Home/Index
  12. isAjaxData: true, //是从Ajax取数据还是非Ajax取数据
  13. divClass: 'z_paging', //外围DIV的Class,其下有.z_paging a , .z_paging a:hover , .z_paging>.z_paging_current
  14. navEvent: ''//点击导航页后所要执行的事件function(){...},通常和isAjaxData==true联用。
  15. };
  16. $.fn.zPagination = function (options) {
  17. $this = $(this);
  18. var ops = $.extend({}, defaults, options);
  19. var _pageCount = 0;
  20. var _startNav = 0;
  21. var _endNav = 0;
  22.  
  23. //初始化参数
  24. function initParameter() {
  25. _pageCount = (ops.rowCount % ops.pageSize == 0) ? ops.rowCount / ops.pageSize : parseInt(ops.rowCount / ops.pageSize) + 1;
  26. if (ops.currentPage <= parseInt(ops.navPage / 2)) {
  27. _startNav = 1;
  28. } else {
  29. _startNav = ops.currentPage - parseInt(ops.navPage / 2); //(30-(10/2)==25)
  30. }
  31.  
  32. _endNav = _startNav + ops.navPage;
  33. if (_endNav > _pageCount) {
  34. _endNav = _pageCount;
  35. _startNav = _endNav - ops.navPage;
  36. }
  37. if (_startNav < 1) {
  38. _startNav = 1;
  39. }
  40.  
  41. //生成DOM元素
  42. if (ops.isAjaxData == true) {
  43. generateAjaxDom();
  44. } else {
  45. generateDom();
  46. }
  47. };
  48.  
  49. //网址方式加载数据 isAjaxData==false 时执行
  50. function generateDom() {
  51. $this.html('').addClass(ops.divClass);
  52. $('<a href=' + ops.navUrl + '1></a>').html(1).appendTo($this);
  53. _startNav++;
  54. if (_startNav != 2) {
  55. $('<span></span>').html('...').appendTo($this);
  56. }
  57. while (_startNav < _endNav) {
  58. $('<a href=' + ops.navUrl + _startNav + '></a>').html(_startNav).appendTo($this);
  59. _startNav++;
  60. }
  61. _startNav--;
  62.  
  63. if (_endNav < _pageCount) {
  64. $('<span></span>').html('...').appendTo($this);
  65. }
  66. if (_startNav < _endNav && _endNav <= _pageCount) {
  67. $('<a href=' + ops.navUrl + _endNav + '></a>').html(_pageCount).appendTo($this);
  68. }
  69. findCurrentNum();
  70. }
  71.  
  72. //通过Ajax方式加载数据 isAjaxData==true 时执行
  73. function generateAjaxDom() {
  74. $this.html('').addClass(ops.divClass);
  75. $('<a href="javascript:void(0);"></a>').html(1).appendTo($this);
  76. _startNav++;
  77. if (_startNav != 2) {
  78. $('<span></span>').html('...').appendTo($this);
  79. }
  80. while (_startNav < _endNav) {
  81. $('<a href="javascript:void(0);"></a>').html(_startNav).appendTo($this);
  82. _startNav++;
  83. }
  84. _startNav--;
  85.  
  86. if (_endNav < _pageCount) {
  87. $('<span></span>').html('...').appendTo($this);
  88. }
  89. if (_startNav < _endNav && _endNav <= _pageCount) {
  90. $('<a href="javascript:void(0);"></a>').html(_pageCount).appendTo($this);
  91. }
  92.  
  93. //给每个<a />添加事件
  94. function initAjaxData() {
  95. $this.find('a').bind('click', function () {
  96. try {
  97. ops.currentPage = parseInt($(this).html());
  98. if (typeof (ops.navEvent) == 'function') {
  99. ops.navEvent();
  100. initParameter(); //重新生成页数导航条,放在这里,放在这里,是为了避免因参数没传对,而出现看见导航页变了,而数据没变的情况
  101. }
  102. } catch (e) {
  103.  
  104. }
  105. });
  106. }
  107. initAjaxData();
  108. findCurrentNum();
  109. }
  110.  
  111. //找出当前页
  112. function findCurrentNum() {
  113. $this.find('a').each(function () {
  114. if (parseInt($(this).html()) == ops.currentPage) {
  115. $(this).addClass('z_paging_current');
  116. }
  117. });
  118. appendEle();
  119. }
  120.  
  121. //附加元素 是否显示总数据数
  122. function appendEle() {
  123. if (typeof (ops.showRowsCount) == 'boolean') {
  124. $('<span class="z_rows_count"></span>').html('总数:' + ops.rowCount).appendTo($this);
  125. }
  126. }
  127.  
  128. initParameter();
  129.  
  130. //获取当前是第几页 调用方式:this.currentPage
  131. this.currentPage = function () {
  132. return ops.currentPage();
  133. };
  134.  
  135. return this;
  136. };
  137. })(jQuery, window);

CSS

  1. /*zPagination Begin*/
  2. .z_paging
  3. {
  4. }
  5. .z_paging a, .z_paging span
  6. {
  7. float: left;
  8. display: inline-block;
  9. vertical-align: text-bottom;
  10. text-align: center;
  11. line-height: 34px;
  12. background-color: #fff;
  13. }
  14. .z_paging a
  15. {
  16. cursor: pointer;
  17. border-radius: 3px;
  18. border: 1px solid #e5e5e5;
  19. padding: 0 12px;
  20. margin: 0 2px;
  21. text-decoration: none;
  22. color: #734ba9;
  23. }
  24. .z_paging a:hover
  25. {
  26. background-color: #6699ff;
  27. color: #fff;
  28. }
  29. .z_paging > .z_paging_current
  30. {
  31. background-color: #e5e5e5;
  32. }
  33. .z_paging > .z_rows_count
  34. {
  35. border-radius: 3px;
  36. border: 1px solid #e5e5e5;
  37. padding: 0 12px;
  38. margin: 0 2px;
  39. text-decoration: none;
  40. color: #734ba9;
  41. }
  42. /*zPagination End*/

jQuery插件实例六:jQuery 前端分页的更多相关文章

  1. jQuery插件实例五:手风琴效果[动画效果可配置版]

    昨天写了个jQuery插件实例四:手风琴效果[无动画版]那个是没有动画效果的,且可配置性不高,本篇为有动画效果.对于一些数据做了动态的计算,以实现自适应. 欢迎大家入群相互交流,学习,新群初建,欢迎各 ...

  2. 【jQuery插件】用jQuery Masonry快速构建一个pinterest网站布局(转)

    [jQuery插件]用jQuery Masonry快速构建一个pinterest网站布局 时间:2011年03月21日作者:愚人码头查看次数:29,744 views评论次数:25条评论 前段时间领导 ...

  3. 转 jquery插件--241个jquery插件—jquery插件大全

    241个jquery插件—jquery插件大全 jquery插件jqueryautocompleteajaxjavascriptcoldfusion jQuery由美国人John Resig创建,至今 ...

  4. 精美jQuery插件及源码 前端开发福利

    jQuery是一个非常不错的javascript框架,很多前端开发者喜欢的原因不仅是因为jQuery使用起来方便,更重要的是因为它的插件很多,我们可以将这些插件应用到自己的项目中去.下面这些精美的jQ ...

  5. 转:精美jQuery插件及源码 前端开发福利

    原文来自于:http://www.html5tricks.com/pretty-jquery-plugin.html jQuery是一个非常不错的javascript框架,很多前端开发者喜欢的原因不仅 ...

  6. 一个很简单的jQuery插件实例教程(菜鸟级)

    很多公司的前端设计开发人员都是女孩子,而这些女孩子很多JavaScript技能都不是很好.而前端开发过程中,JavaScript技能又是必不可少的.所以,如果前端小MM正在为某个JavaScript效 ...

  7. jQuery插件实例一:年华时代插件Alert对话框

    在工作中使用jQuery插件相信对于程序员来说非常普遍,在网络上也有很多优秀的插件可供大家使用,功能非常强大.在之前用过的一些插件中,有些太过追求功能的强大和可配置性,造成使用的复杂度上升.个人认为与 ...

  8. 网站开发常用jQuery插件总结(六)关键词说明插件cluetip

    我们开发的网站,总有它一定的用途.如企业站用来宣传企业或展示产品,技术站用来分享自己的思路和经验.既然网站有了它的用途,那么就拥有了它本身的关键词(关键词说明网站的主要内容).例如企业站的关键词大部分 ...

  9. JQUERY插件学习之jQuery UI

    jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互 ...

随机推荐

  1. shell脚本中打印所有匹配某些关键字符的行或前后各N行

    在日常运维中,经常需要监控某个进程,并打印某个进程的监控结果,通常需要打印匹配某个结果的行以及其前后各N行. 注意:echo使用-e参数,对打印的结果中进行\n换行 [root@mq-master02 ...

  2. Solr 访问 403 错误

    把 Solr 基础环境搭建好后访问发现会出现 403 错误: 解决方法: 找到自己 Tomcat 目录下的 solr ,找到  ...\solr\WEB-INF\web.xml,然后把 169 - 1 ...

  3. Spring学习之路-SpringBoot简单入门

    简单讲SpringBoot是对spring和springMVC的二次封装和整合,新添加了一些注解和功能,不算是一个新框架. 学习来源是官方文档,虽然很详细,但是太墨迹了… 地址:https://doc ...

  4. [转]Vue.js 入门教程

    本文转自:http://www.runoob.com/w3cnote/vue-js-quickstart.html 什么是 Vue.js? Vue.js 是用于构建交互式的 Web  界面的库. Vu ...

  5. MVC初级教程(三)

      演示产品源码下载地址:http://www.jinhusns.com/Products/Download 

  6. 将ABP的数据库从SQLSERVER迁移到MySql

    摘要:之前跟着网上的一些教程,学习了一点ABP的知识.最近想说把默认的SQLSERVER数据迁移到mysql吧 首先网上搜一波 安装MySql.Data.Entity 然后你需要安装 MySql.Da ...

  7. Docker创建运行多个mysql容器

    1.使用mysql/mysql-server:latest镜像快速启动一个Mysql实例 docker run --name ilink_user_01 -e MYSQL_ROOT_PASSWORD= ...

  8. web开发中的两把锁之数据库锁:(高并发--乐观锁、悲观锁)

    这篇文章讲了 1.同步异步概念(消去很多疑惑),同步就是一件事一件事的做:sychronized就是保证线程一个一个的执行. 2.我们需要明白,锁机制有两个层面,一种是代码层次上的,如Java中的同步 ...

  9. Hadoop windows 环境配置

    下载 winutils 点击 这里下载 winutils 包,并解压缩. 此处解压缩后目录位置为 D:\software\hadoop2.6 配置环境变量 变量名 变量值 HADOOP_USER_NA ...

  10. Java - "JUC" ReentrantReadWriteLock

    Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock ReadWriteLock 和 ReentrantReadWriteLock介绍 ReadWriteLo ...