当前位置:Gxlcms > JavaScript > 基于Bootstrap和jQuery构建前端分页工具实例代码

基于Bootstrap和jQuery构建前端分页工具实例代码

时间:2021-07-01 10:21:17 帮助过:4人阅读

前言

为啥名字叫【前端分页工具】?因为我实在想不到什么好名字,如果想要更加贴切的理解这个工具,应该从业务来看

业务是这样的,有一个数据从后台传到前台,因为数据量不大,因此传过来之后直接显示即可,但是=。=所谓的数据量不大,最多也达到成百上千条,不可能全部显示出来,那么就需要分页

常规的分页是利用Ajax,通过传页偏移量到后台,后台查询数据库再返回数据,可以实现无刷新分页,拿到的数据也是最新的

前端分页

优点:一次传输数据,避免用户反复请求服务器,减少网络带宽、服务器调度压力、数据库查询、缓存查询压力

缺点:有新数据无法实时更新,除非用户重新请求数据

过程

刚开始我不希望造轮子,想尽快完成,于是找了很久Bootstrap的工具,找到了一个BootstrapTable,这个插件很强大,除了可以使用常规的方式分页,还可以指定数据(json),进行前端分页

但是,这个是表格分页,也就是说,如果不是表格那就没用了,刚好…我的业务就不是表格..那么只能看插件源码修改了,改的面目全非后,上个厕所回来,想到了更好的办法,于是删除…

解决办法:先思考分页是为了什么?呈现想看的页面,隐藏不想看的。没错,可以利用CSS的display属性

版本

Bootstrap-3.3.0

jQuery-1.11.3

代码

JavaScript

  1. <script type="text/javascript">
  2. //上一页
  3. function previous(){
  4. //当前页-1
  5. new_page = parseInt($('#current_page').val()) - 1;
  6. go_to_page(new_page);
  7. }
  8. //下一页
  9. function next(){
  10. //当前页+1
  11. new_page = parseInt($('#current_page').val()) + 1;
  12. go_to_page(new_page);
  13. }
  14. //跳转某一页
  15. function go_to_page(page_num){
  16. $('.page_link[longdesc=' + page_num +']').parent().addClass('active').siblings('.active').removeClass('active');
  17. //获取隐藏域中页数大小(每页多少条数据)
  18. var show_per_page = parseInt($('#show_per_page').val());
  19. //得到元素从哪里开始的片数(点击页 * 页大小)如点击第5页,5条/页。则开始为25
  20. start_from = page_num * show_per_page;
  21. //得到结束片的元素数量,如果开始为25,5条/页,则结束为30
  22. end_on = start_from + show_per_page;
  23. //隐藏所有子div元素的内容,显示具体片数据,如显示25~30
  24. $('#datas').children().css('display', 'none').slice(start_from, end_on).css('display', 'inline-block');
  25. //每页显示的数目
  26. var show_per_page = 10;
  27. //获取总数据的数量
  28. var number_of_items = $('#topics').children().size();
  29. //计算页数
  30. var number_of_pages = Math.ceil(number_of_items/show_per_page);
  31. //在页数区域内则做页偏移
  32. if( (page_num >= 2) && (page_num <= (number_of_pages - 3)) ){
  33. //生成分页->上一页
  34. var page_info = '<li><a class="previous_link" href="javascript:previous();">«</a></li>';
  35. var p = page_num;
  36. var i = page_num - 2;
  37. var j = page_num + 2;
  38. //生成分页->前2页
  39. while(page_num > i){
  40. page_info += '<li><a class="page_link" href="javascript:go_to_page(' + i +')" longdesc="' + i +'">'+ (i + 1) +'</a></li>';
  41. i++;
  42. }
  43. //生成分页->当前页
  44. page_info += '<li><a class="page_link" href="javascript:go_to_page(' + page_num +')" longdesc="' + page_num +'">'+ (page_num + 1) +'</a></li>';
  45. //生成分页->后2页
  46. while(p < j){
  47. if(p == number_of_pages){
  48. break;
  49. }
  50. page_info += '<li><a class="page_link" href="javascript:go_to_page(' + (p + 1) +')" longdesc="' + (p + 1) +'">'+ (p + 2) +'</a></li>';
  51. p++;
  52. }
  53. //生成分页->下一页
  54. page_info += '<li><a class="next_link" href="javascript:next();">»</a></li>';
  55. //加载分页
  56. $('.pagination').html(page_info);
  57. $('.page_link[longdesc=' + page_num +']').parent().addClass('active').siblings('.active').removeClass('active');
  58. }
  59. else{ //否则不偏移
  60. //激活某一页,使得显示某一页
  61. $('.page_link[longdesc=' + page_num +']').parent().addClass('active').siblings('.active').removeClass('active');
  62. }
  63. //更新隐藏域中当前页
  64. $('#current_page').val(page_num);
  65. }
  66. $(function(){
  67. //每页显示的数目
  68. var show_per_page = 10;
  69. //获取话题数据的数量
  70. var number_of_items = $('#datas').children().size();
  71. //计算页数
  72. var number_of_pages = Math.ceil(number_of_items/show_per_page);
  73. //设置隐藏域默认值
  74. $('#current_page').val(0);
  75. $('#show_per_page').val(show_per_page);
  76. //生成分页->上一页
  77. var page_info = '<li><a class="previous_link" href="javascript:previous();">«</a></li>';
  78. var current_link = 0;
  79. //生成分页->页数
  80. while(number_of_pages > current_link){
  81. if(current_link == 5){
  82. break;
  83. }
  84. page_info += '<li><a class="page_link" href="javascript:go_to_page(' + current_link +')" longdesc="' + current_link +'">'+ (current_link + 1) +'</a></li>';
  85. current_link++;
  86. }
  87. //生成分页->下一页
  88. page_info += '<li><a class="next_link" href="javascript:next();">»</a></li>';
  89. //加载分页
  90. $('.pagination').html(page_info);
  91. //生成分页->左侧总数
  92. $("#data-total-page").html(show_per_page+"条/页,共"+number_of_pages+"页")
  93. //激活第一页,使得显示第一页
  94. $('#data-pagination li').eq(1).addClass('active');
  95. //隐藏该对象下面的所有子元素
  96. $('#datas').children().css('display', 'none');
  97. //显示第n(show_per_page)元素
  98. $('#datas').children().slice(0, show_per_page).css('display', 'inline-block');
  99. });
  100. </script>

HTML

  1. <!-- 数据 -->
  2. <div id="datas">
  3. <?php
  4. foreach($data as $v)
  5. {
  6. echo '<div class="data">
  7. <div class="data-info">
  8. <div class="data-name">' + $v['name'] + '</div>
  9. <div class="data-blog">' + $v['blog'] + '</div>
  10. </div>
  11. </div>
  12. ';
  13. }
  14. ?>
  15. </div>
  16. <!-- 分页 -->
  17. <input type="hidden" id="current_page" value="0">
  18. <input type="hidden" id="show_per_page" value="0">
  19. <div id="data-page-info">
  20. <div id="data-total-page"></div>
  21. <div id="data-pagination">
  22. <ul class="pagination"></ul>
  23. </div>
  24. </div>

效果如下

动态切换

以上所述是小编给大家介绍的基于Bootstrap和jQuery构建前端分页工具实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

人气教程排行