后台返回所有数据,前端处理分页

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>前端分页</title>
   <link rel="stylesheet" href="src/jquery.page.css">
</head>
<style>
   .first, .last{width: 60px}
   ul{
      padding: 0;
   }
   .pagingUl li a{
      border: 1px solid #dddee1;
      color: #000;
   }
   .header li,.main li{
      list-style-type: none;
      line-height: 30px;
      border-bottom: 1px solid #dddee1;
      padding: 8px;
      width: 480px;
   }
   li span{
      display: inline-block;
      width: 150px;
      text-align: center;
   }
   .main li:nth-of-type(odd){
      background:#f8f8f8;
   }
</style>
<body>

   <ul class="main" style="margin: 0  0 20px 0">
   </ul>
   <div id="page"></div>
   <script src="http://www.jq22.com/jquery/1.11.1/jquery.min.js"></script>
   <script type="text/javascript" src="src/jquery.page.js"></script>
   <script type="text/javascript">
      data=[{num:1,name:'安徽',value:199},{num:2,name:'湖北',value:19},{num:3,name:'广东',value:99},{num:4,name:'北京',value:109},{num:5,name:'安徽',value:199},{num:6,name:'湖北',value:19},{num:7,name:'广东',value:99},{num:8,name:'北京',value:109},]
      var result = [];
      var pagecount=1//默认第一页
      //将获取到的所有数据进行具体分页
      for(var i=0,len=data.length;i<len;i+=4){
         result.push(data.slice(i,i+4));
      }
      console.log(result)
      $(function(){
         //处理首页的数据
         if(pagecount==1){
            var dataFirst=result[0]
            var html=''
            for(var i=0; i<dataFirst.length; i++){
               html+='<li class="code"><span class="num">'+dataFirst[i].num+'</span><span class="name">'+dataFirst[i].name+'</span><span class="value">'+dataFirst[i].value+'%</span></li>'
            }
            $(".main").append(html);
         }
         $("#page").Page({
          totalPages:2,//分页总数
          liNums: 3,//分页的数字按钮数(建议取奇数)
          activeClass: 'activP', //active 类样式定义
          callBack : function(page){
           console.log(page)
           pagecount=page
           var arr=result[page-1]
           console.log(arr)
               $(".main").empty()
                var html=''
               for(var i=0; i<arr.length; i++){
                  html+='<li class="code"><span class="num">'+arr[i].num+'</span><span class="name">'+arr[i].name+'</span><span class="value">'+arr[i].value+'%</span></li>'
               }
           $(".main").append(html);
          }
      });
      })
   </script>
</body>
</html>

 

//jquery.page.js

/* 
*page plugin 1.0   2016-09-29 by cary
*/
(function ($) {
  //默认参数
  var defaults = {
    totalPages: 9,//总页数
    liNums: 9,//分页的数字按钮数(建议取奇数)
    activeClass: 'active' ,//active类
    firstPage: '首页',//首页按钮名称
    lastPage: '末页',//末页按钮名称
    prv: '«',//前一页按钮名称
    next: '»',//后一页按钮名称
    hasFirstPage: true,//是否有首页按钮
    hasLastPage: true,//是否有末页按钮
    hasPrv: true,//是否有前一页按钮
    hasNext: true,//是否有后一页按钮
    callBack : function(page){
        //回掉,page选中页数
    }
  };

  //插件名称
  $.fn.Page = function (options) {
    //覆盖默认参数
    var opts = $.extend(defaults, options);
    //主函数
    return this.each(function () {
      var obj = $(this);
      var l = opts.totalPages;
      var n = opts.liNums;
      var active = opts.activeClass;
      var str = '';
      var str1 = '<li><a href="javascript:" class="'+ active +'">1</a></li>';
      if (l > 1&&l < n+1) {
        for (i = 2; i < l + 1; i++) {
          str += '<li><a href="javascript:">' + i + '</a></li>';
        }
      }else if(l > n){
        for (i = 2; i < n + 1; i++) {
          str += '<li><a href="javascript:">' + i + '</a></li>';
        }
      }
      var dataHtml = '';
      if(opts.hasNext){
          dataHtml += '<div class="next fr">' + opts.next + '</div>';
      }
      if(opts.hasLastPage){
          dataHtml += '<div class="last fr">' + opts.lastPage + '</div>';
      }
          dataHtml += '<ul class="pagingUl">' + str1 + str + '</ul>';
      if(opts.hasFirstPage){
          dataHtml += '<div class="first fr">' + opts.firstPage + '</div>';
      }
      if(opts.hasPrv){
          dataHtml += '<div class="prv fr">' + opts.prv + '</div>';
      }
      
      obj.html(dataHtml).off("click");//防止插件重复调用时,重复绑定事件
      
      obj.on('click', '.next', function () {
        var pageshow = parseInt($('.' + active).html());
        var nums,flag;
        var a = n % 2;
        if(a == 0){
          //偶数
          nums = n;
          flag = true;
        }else if(a == 1){
          //奇数
          nums = (n+1);
          flag = false;
        }
        if(pageshow >= l) {
          return;
        }else if(pageshow > 0&&pageshow <= nums/2){
          //最前几项
          $('.' + active).removeClass(active).parent().next().find('a').addClass(active);
        }else if((pageshow > l-nums/2&&pageshow < l&&flag==false)||(pageshow > l-nums/2-1&&pageshow < l&&flag==true)){
          //最后几项
          $('.' + active).removeClass(active).parent().next().find('a').addClass(active);
        }else{
          $('.' + active).removeClass(active).parent().next().find('a').addClass(active);
          fpageShow(pageshow+1);
        }
        opts.callBack(pageshow+1);
      });
      obj.on('click', '.prv', function () {
        var pageshow = parseInt($('.' + active).html());
        var nums = odevity(n);
        if (pageshow <= 1) {
            return;
        }else if((pageshow > 1&&pageshow <= nums/2)||(pageshow > l-nums/2&&pageshow < l+1)){
          //最前几项或最后几项
          $('.' + active).removeClass(active).parent().prev().find('a').addClass(active);
        }else {
          $('.' + active).removeClass(active).parent().prev().find('a').addClass(active);
          fpageShow(pageshow-1);
        }
        opts.callBack(pageshow-1);
      });

      obj.on('click', '.first', function(){
        var activepage = parseInt($('.' + active).html());
        if (activepage <= 1){
          return
        }//当前第一页
        opts.callBack(1);
        fpagePrv(0);
      });
      obj.on('click', '.last', function(){
        var activepage = parseInt($('.' + active).html());
        if (activepage >= l){
          return;
        }//当前最后一页
        opts.callBack(l);
        if(l>n){
          fpageNext(n-1);
        }else{
          fpageNext(l-1);
        }
      });

      obj.on('click', 'li', function(){
        var $this = $(this);
        var pageshow = parseInt($this.find('a').html());
        var nums = odevity(n);
        opts.callBack(pageshow);
        if(l>n){
          if(pageshow > l-nums/2&&pageshow < l+1){
            //最后几项
            fpageNext((n-1)-(l-pageshow));
          }else if(pageshow > 0&&pageshow < nums/2){
            //最前几项
            fpagePrv(pageshow-1);
          }else{
            fpageShow(pageshow);
          }
        }else{
          $('.' + active).removeClass(active);
          $this.find('a').addClass(active);
        }
      });

          //重新渲染结构
        /*activePage 当前项*/
        function fpageShow(activePage){
          var nums = odevity(n);
          var pageStart = activePage - (nums/2-1);
          var str1 = '';
          for(i=0;i<n;i++){
            str1 += '<li><a href="javascript:" class="">' + (pageStart+i) + '</a></li>'
          }
          obj.find('ul').html(str1);
          obj.find('ul li').eq(nums/2-1).find('a').addClass(active);
        }
        /*index 选中项索引*/
        function fpagePrv(index){
          var str1 = '';
          if(l>n-1){
            for(i=0;i<n;i++){
              str1 += '<li><a href="javascript:" class="">' + (i+1) + '</a></li>'
            }
          }else{
            for(i=0;i<l;i++){
              str1 += '<li><a href="javascript:" class="">' + (i+1) + '</a></li>'
            }
          }
          obj.find('ul').html(str1);
          obj.find('ul li').eq(index).find('a').addClass(active);
        }
        /*index 选中项索引*/
        function fpageNext(index){
          var str1 = '';
          if(l>n-1){
            for(i=l-(n-1);i<l+1;i++){
              str1 += '<li><a href="javascript:" class="">' + i + '</a></li>'
            }
           obj.find('ul').html(str1);
           obj.find('ul li').eq(index).find('a').addClass(active);
          }else{
            for(i=0;i<l;i++){
              str1 += '<li><a href="javascript:" class="">' + (i+1) + '</a></li>'
            }
           obj.find('ul').html(str1);
           obj.find('ul li').eq(index).find('a').addClass(active);
          }
        }
        //判断liNums的奇偶性
        function odevity(n){
          var a = n % 2;
          if(a == 0){
            //偶数
            return n;
          }else if(a == 1){
            //奇数
            return (n+1);
          }
        }
    });
  }
})(jQuery);

//jquery.page.css

@charset "utf-8";
/*样式参考*/
a {
    text-decoration: none;
}

#page {
    height: 50px;
    display: table;

}

.page {
    text-align: center;
}

.fl {
    float: left;
}

.fr {
    float: right;
}

.pagingUl {
    float: right;
    padding: 0;
    margin: 0;
    list-style: none;
    height: 30px;
}

.pagingUl li {
    float: left;
    width: 30px;
    height: 30px;
    background: #fff;
    text-align: center;
    margin-right: 5px;
    border-radius: 5px
}

.pagingUl li a {
    display: inline-block;
    width: 30px;
    height: 30px;
    text-align: center;
    line-height: 28px;
    color: #666;
    font-size: 12px;
    border-radius: 5px
}

.prv,
.next {
    width: 30px;
    height: 30px;
    text-align: center;
    line-height: 30px;
    cursor: pointer;
    background: #fff;
    padding: 0 5px;
    border-radius: 5px;
}

.prv {
    margin-right: 10px;
}

.first,
.last {
    width: 30px;
    height: 30px;
    font-size: 12px;
    text-align: center;
    line-height: 30px;
    /*border: 1px solid #ddd;*/
    cursor: pointer;
    background: #fff;
    padding: 0 5px;
    border-radius: 5px;
    margin-right: 10px;
}

.prv:hover,
.next:hover,
.first:hover,
.last:hover,
.pagingUl li a:hover,
.activP {
    background-color:#deeffa!important;
    color: #0098e1!important;
}

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
你可以使用 Element UI 的 Pagination 组件结合 Vue 来实现表格的分页功能。对于后台一次返回所有数据的情况,前端可以根据当前页码和每页显示的条数来进行数据分页处理。 首先,在 Vue 的模板中,你需要使用 Pagination 组件来展示分页信息,并绑定相应的属性和事件。 ```html <template> <div> <el-table :data="tableData.slice(startIndex, endIndex)"> <!-- 表格列定义 --> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="sizes,prev,pager,next,total" :total="tableData.length"> </el-pagination> </div> </template> ``` 然后,在 Vue 的 script 部分,你需要定义相关属性和事件处理函数。 ```javascript <script> export default { data() { return { tableData: [], // 所有数据 currentPage: 1, // 当前页码 pageSize: 10, // 每页显示的条数 }; }, computed: { startIndex() { return (this.currentPage - 1) * this.pageSize; }, endIndex() { return this.currentPage * this.pageSize; }, }, methods: { handleSizeChange(val) { this.pageSize = val; this.currentPage = 1; // 切换每页显示条数后,重置当前页码为第一页 }, handleCurrentChange(val) { this.currentPage = val; }, }, }; </script> ``` 这样,当用户切换每页显示的条数或者点击页码时,Vue 会根据当前页码和每页显示的条数来计算需要展示的数据范围,并更新表格的内容。注意,`tableData.slice(startIndex, endIndex)` 可以根据当前页码进行切片操作,只显示对应页码的数据。 请确保在获取到所有数据后,将数据赋值给 `tableData` 属性。你可以通过后台接口获取所有数据,然后在前端进行分页处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值