手作~資料分頁功能 PageList

最近專案需求分頁功能但當下用的感覺用起來不夠順手,突然心血來潮自己寫一個出來,以下程式碼:

 

<!DOCTYPE html>
<html>
<head>
 <title>分頁</title>
 <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
 <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
 <script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
</head>
<body>
<ul class="pagination">
 <!-- <li><a href="1.html">«</a></li>
 <li><a href="1.html">1</a></li>
 <li><a href="2.html">2</a></li>
 <li><a href="3.html">3</a></li>
 <li><a href="#">4</a></li>
 <li><a href="#">5</a></li>
 <li><a >...</a></li>
 <li><a href="#">»</a></li> -->
</ul>

</body>
</html>
<script>
  var pageList = [];
  for(var i =1; i <= 272 ; i++){
    pageList.push(i);
  }
  
  $(function (){
    //console.log(pageList.length);
    LoadPage()
   
  });

  // 開始寫入頁碼動作  
  var pageSize =  Math.ceil(pageList.length / 10) ; //總頁數無條件進位
  var nowItems = 5; // 每次顯示頁數
  var total = pageList.length;
  var limt = 10;
  var offset = 0;
  var nowNumber = 2; // 當前所在頁碼
  var nowKeepPageList = []; // 當前所在頁碼區間
  function LoadPage(){
    // console.log(total);
    //console.log(pageSize);
    if(pageSize > 1){
      var html ='';
      $('.pagination').append('<li><a onclick="Previous()">«</a></li>');
      $('.pagination').append('<li class="firstpageitem active"><a onclick="FirstPage('+ 1 +')" value="1">'+ 1 +'</a></li>');
      $('.pagination').append('<li class="firstitem hide"><a>...</a></li>');
      for(var i = 2; i < pageSize ; i++){
        //console.log(i);
          if(i < nowItems){
            html = html + '<li><a class="pageitem" onclick="NowNumberPage('+ nowNumber +')" value="'+nowNumber+'">'+ nowNumber +'</a></li>';
            nowNumber++;
            offset++;
            nowKeepPageList.push(nowNumber);
          }
      }
      $('.pagination').append(html);
      $('.pagination').append('<li class="lastitem"><a >...</a></li>');
      $('.pagination').append('<li class="lastpageitem"><a  onclick="LastPage('+ pageSize +')" value="'+pageSize+'">'+ pageSize +'</a></li>');
      $('.pagination').append('<li><a onclick="Next()">»</a></li>');
    }   
  }

  // 上一頁
  var _nowfirstnumber = 0;
  function Previous(){
    var _active = parseInt($('li.active a').text()); // 當前標註頁碼

     // 針對當前頁碼標註控制 1
    if(_active == pageSize){
      $('li.active').removeClass('active'); // 刪除標註頁碼
      $('li [value="'+(pageSize -1)+'"]').parent('li').addClass('active');//標註當前頁碼
    }else{
      _nowfirstnumber = parseInt($(".pageitem:first").text());
      _nowfirstnumber--;
      if(_nowfirstnumber > 1){      
        $('.lastitem').removeClass('hide'); // 刪除至最後一頁後多頁符號
        $(".pageitem:last").parent().remove();
        $('.pageitem:first').parent().before('<li><a class="pageitem" onclick="NowNumberPage('+ _nowfirstnumber +')" value="'+_nowfirstnumber+'">'+ _nowfirstnumber +'</a></li>');
      }  

      if(_nowfirstnumber == 2){
        $('.firstitem').addClass('hide'); // 顯示至第一頁後多頁符號
      }
    }
   
     // 針對當前頁碼標註控制 2
     if(_active > 1){
      $('li.active').removeClass('active'); // 刪除標註頁碼
      $('li [value="'+(_active - 1)+'"]').parent('li').addClass('active');//標註當前頁碼
    }
  }

  // 下一頁
  var _nowlastnumber = 0
  function Next(){
    var _active = parseInt($('li.active a').text()); // 當前標註頁碼
    // console.log(_active);

    // 針對當前頁碼標註控制 1
    if(_active == 1){
      $('li.active').removeClass('active'); // 刪除標註頁碼
      $('li [value="2"]').parent('li').addClass('active');//標註當前頁碼
    }else{    
      // 增加下一頁至集合中功能
      _nowlastnumber = parseInt($(".pageitem:last").text());
      _nowlastnumber++;
      $('.firstitem').removeClass('hide'); // 顯示至第一頁後多頁符號
      if(_nowlastnumber <= pageSize -1){
        $('.lastitem').removeClass('hide'); // 隱藏至最後一頁後多頁符號
        $(".pageitem:first").parent().remove();
        $('.pageitem:last').parent().after('<li><a class="pageitem" onclick="NowNumberPage('+ _nowlastnumber +')" value="'+_nowlastnumber+'">'+ _nowlastnumber +'</a></li>');
      }  

      if(_nowlastnumber == pageSize -1){
        $('.lastitem').addClass('hide'); // 隱藏至最後一頁後多頁符號
        $('.firstitem').removeClass('hide'); // 顯示至第一頁後多頁符號
      }     
    }  

    // 針對當前頁碼標註控制 2
    if(_active < pageSize){
      $('li.active').removeClass('active'); // 刪除標註頁碼
      $('li [value="'+(_active + 1)+'"]').parent('li').addClass('active');//標註當前頁碼
    }
  }

  // 頁碼當前頁數
  function NowNumberPage(page){
     $('li.active').removeClass('active'); // 刪除標註頁碼
     $('li [value="'+ page +'"]').parent('li').addClass('active');//標註當前頁碼
  }

  // 轉至第一頁
  function FirstPage(){
    // console.log($('.firstpageitem a').text());
    var nownumber = parseInt($('.firstpageitem a').text());
    if(nownumber < pageSize){
      $(".pageitem").parent().remove(); //刪除page集合
      $('.lastitem').removeClass('hide'); // 顯示至最後一頁後多頁符號
      $('.firstitem').addClass('hide'); // 隱藏至第一頁後多頁符號
      var _min  = nownumber < 4 ? (nownumber + 4) : 1 // 當前筆數往後4筆,到第 4 筆為止
      // console.log(_min);
      $('li.active').removeClass('active'); // 刪除標註頁碼
      $('.firstpageitem').addClass('active');// 最後一頁加上 標註
      $('.firstitem').after('<li><a class="pageitem" onclick="NowNumberPage('+ 2 +')" value="2">'+ 2 +'</a></li>');
      for(var i = nownumber +2; i < _min ; i++){
          //console.log(i);
          $('.pageitem:last').parent().after('<li><a class="pageitem" onclick="NowNumberPage('+ i +')" value="'+i+'">'+ i +'</a></li>');
      }
    }
  }

  // 轉至最後一頁
  function LastPage(page){
    // console.log($('.lastpageitem a').text());
    var nownumber = parseInt($('.lastpageitem a').text());
    if(nownumber == pageSize){
      $(".pageitem").parent().remove(); //刪除page集合
      $('.firstitem').removeClass('hide'); // 顯示至第一頁後多頁符號
      $('.lastitem').addClass('hide'); // 隱藏至最後一頁後多頁符號
      var _min  = nownumber > 4 ? (nownumber - 4) : 1 // 當前筆數往前4筆,到第 1 筆為止
      //console.log(_min);
      $('li.active').removeClass('active'); // 刪除標註頁碼
      $('.lastpageitem').addClass('active');// 最後一頁加上 標註
      $('.lastitem').before('<li><a class="pageitem" onclick="NowNumberPage('+ (nownumber -1) +')" value="'+(nownumber -1)+'">'+ (nownumber -1) +'</a></li>');
      for(var i = nownumber -2; i > _min ; i--){
          //console.log(i);
          $('.pageitem:first').parent().before('<li><a class="pageitem" onclick="NowNumberPage('+ i +')" value="'+i+'"">'+ i +'</a></li>');
      }
    }
  }
</script>

附上GitHub:https://github.com/joelee2017/bootstrap-pagination