純粋なJavaScriptページングソースプラグイン


github:https://github.com/OoSpace/Fy
効果:http://oospace.sinaapp.com/2.php?pageIndex=4
設計構想:
  • 少なくともページ番号の表示範囲がfirstからlastまで、および現在のページindex
  • であることを知る必要がある.
  • まずfirstの値とlastの値を決定する.
  • いつでもfirst>=1
  • いつでも1<=last<=count
  • 現在のページindexはfirstとlastの中間
  • にあるはずです.
  • 1ページあたりの表示本数はpageNum、最大表示枚数はmaxPageNum
  • 一般:last=index+maxPageNum/2
  • 一般:first=index-maxPageNum/2
  • 特殊な場合:indexが最後のページにあるか、または最後のページに近い場合
  • 上記のような場合.first=count(総ページ数)-maxPageNum-1かつ(第3条)、効果は以下の



  • 完全なコードは次のとおりです.
            //   (  )
    	var Num=Number(<?php echo $count;?>)
    	//   (  )
    	var index = Number(<?php echo $page;?>);
    	/* //     (  ,    10 ) */
    	var  pageNum=Number(10);	
    	/* //          (  ,    5   ,          1) */
    	var  maxPageNum=Number(5);
    	
    	//     
    	
    	
    	
    	//       
    	var count = (Num%pageNum)>0?(Num/pageNum+1):(Num/pageNum);
             count=Math.floor(count);//         
    	//       ,
    	var first=1;
            //       ,  last<=count;  last     count    //last=index+maxPageNum/2;
    	var last =1;
    		var decrease=Math.floor(maxPageNum/2);//        
    		var increase=Math.floor(maxPageNum/2);//        
    		if(maxPageNum>=1){
    			if(maxPageNum==1){//       
    				first=index<=count?index:count;	
    				last=index<=count?index:count;		
    			}else{
    					//first    
    					first=(index-decrease);
    					while(first<=0){
    						first++;
    					}	
    					//first         
    					if((count-index)<=decrease){
    						var diff=count-first;
    						while(diff<maxPageNum-1){
    							if(first==1){
    								break;
    							}else{
    								--first;
    								diff=count-first;
    							}
    						}
    					}
    					//last   count
    					last=(index+increase);
    					while(last>=1){
    						if(last<=count){
    							break;
    						}
    						last--;
    					}	
    					//last//          maxPageNum   
    					last=last>=maxPageNum?last:(maxPageNum>count?count:maxPageNum);
    			}
    		}else{
    			alert("          !");
    		}
    		
    		var prev = index - 1;//   
    		var next = index+ 1;//   	
    		
    		var str = "<tr>";
    		if(count==0){
    			str += "<td> <a href='#'>0</a> </td><td>";
    		}else if(index>count||index<=0){
    			str="<td style='color:blue;' >      </td>";
    		}else if (count > 0) {
    			str += "<td>";
    			if(first>1){
    				str += "&nbsp;&nbsp;<span  style='color:#4169E1;' >...</span>&nbsp;&nbsp;";
    			}
    			var i=1;
    		    for(i=first;i<=last; i++){
    		    	if(i==index){
    		    		str += "&nbsp;&nbsp;<a href='#'  style='color:#4169E1;' onclick='submit(" + i + ");'>[" + i+ "]</a>&nbsp;&nbsp;";
    		    	}else{
    					str += "&nbsp;&nbsp;<a href='#'  onclick='submit(" + i + ");'>" + i+ "</a>&nbsp;&nbsp;";
    		    	}
    			} 
    				if(last<count){
    					str += "&nbsp;&nbsp;<span  style='font-size:16px;color:#4169E1;' >...</span>&nbsp;&nbsp;";	
    				}
    				
    				str+="</td><td style='font-size: 14px;'> <a href='#first' style='color:#4169E1;font-size: 16px;' >"+ Num +"</a> </td>";
    				/* if(index!=1){
    					str +="<td style='width:60px;font-family:     ;font-size: 14px;' ><a href='#' id='prev'  onclick='submit(" + prev+ ");'>   </a></td>"; 
    				}
    				if(index<count){
    					str +="<td style='width:60px;font-family:     ;font-size: 14px;'><a href='#'  id='next' onclick='submit("+ next + ");'>   </a></td>";
    				}*/
    				if(index!=1&&count>1){
    					str += "<td style='width:40px;font-family:     ;font-size: 14px;white-space: nowrap;'>&nbsp;&nbsp;<a href='#' id='first' name='first' onclick='submit(1);'>  </a>&nbsp;&nbsp;</td>";
    				}
    				if(index!=count&&count>1&&index<count){
    					str	+= "<td style='width:40px;font-family:     ;font-size: 14px;white-space: nowrap;'>&nbsp;&nbsp;<a href='#' onclick='submit(" + count+ ");'>  </a>&nbsp;&nbsp;</td>" ;
    				} 
    					str+="</tr>";
    		}
    		
    		
    //      
        $('.page').html(str);
        
        <table class="page">
    	<tr><td>                     </td></tr>
        </table>
    //      ,
        function submit(pageIndex) {
        	//var sortInfo = $.getUrlParam('sortInfo');//           
        	var url = "<?php echo current_url();?>?page="+pageIndex+"&field=<?php echo$field;?>&value=<?php echo $field_value;?>";
        	window.location.href=url;
        }

    前のページの次のページの机能もあって、ただ私に遮られて隠れて、使うのはただ遮ることを解除するだけでいいです
    使用方法及び注意:
  • パラメータ構成、前の行、以下の
  • //   (  )
    	var Num=Number(<?php echo $count;?>)
    	//   (  )
    	var index = Number(<?php echo $page;?>);
    	/* //     (  ,    10 ) */
    	var  pageNum=Number(10);	
    	/* //          (  ,    5   ,          1) */
    	var  maxPageNum=Number(5);
  • ページング位置およびhtmlコード、以下の
  • //      
        $('.page').html(str);
        <table class="page">
    	<tr><td>                     </td></tr>
        </table>
  • コードクエリイベント、以下の
  • //      ,
        function submit(pageIndex) {
        	//var sortInfo = $.getUrlParam('sortInfo');//           
        	var url = "<?php echo current_url();?>?page="+pageIndex+"&field=<?php echo$field;?>&value=<?php echo $field_value;?>";
        	window.location.href=url;
        }

  • OK、使えます
    あるいは、もう一つの考えを整理しやすい方法です.
    //      
      v
    ar Pagination=function(number,index,eachpage,showpage){
       
    var page={
         
    TOTAL_NUM:Number(number),//      ,  
         
    INDEX_PAGE:Number(index),//    ,  
         
    EACH_PAGE_NUM:eachpage!=undefined?Number(eachpage):5,//     (  ,    10 )
         
    SHOW_PAGES_NUM:showpage!=undefined?Number(showpage):5,//       (  ,    5   ,          1) 
         
    TOTLE_PAGE_NUM:Math.floor((number%eachpage)>0?(number/eachpage+1):(number/eachpage)),//   ,        
         
    CREASE:Math.floor(showpage/2),//          ,
         
    PREV:Number(index-1),//   
         
    NEXT:Number(index+1)//   
        
    };
       
    var P=function(){
        
       
    };
       
    P.getByName=function(name){
        return page[name];
       
    };
       
    return P;
      
    };
    
    //     
      var Fy=new Pagination(100,1,10,5);
      var first=1,last=1;
      var Num=Number(Fy.getByName("TOTAL_NUM"));
      var Mpn=Number(Fy.getByName("SHOW_PAGES_NUM"));
      var count=Number(Fy.getByName("TOTLE_PAGE_NUM"));
      var index=Number(Fy.getByName("INDEX_PAGE"));
      var crease=Number(Fy.getByName("CREASE"));
      var prev=Number(Fy.getByName("PREV"));
      var next=Number(Fy.getByName("NEXT"));
    
    
    //      
      if(Mpn>=1){
       if(Mpn==1){//       
        first=index<=count?index:count; 
        last=index<=count?index:count;  
       }else{
         //first    
         first=(index-crease);
         while(first<=0){
          first++;
         } 
         //first         
         if((count-index)<=crease){
          var diff=count-first;
          while(diff<Mpn-1){
           if(first==1){
            break;
           }else{
            --first;
            diff=count-first;
           }
          }
         }
         //last   count
         last=(index+crease);
         while(last>=1){
          if(last<=count){
           break;
          }
          last--;
         } 
         //last//          maxPageNum   
         last=last>=Mpn?last:(Mpn>count?count:Mpn);
       }
      }else{
       alert("          !");
      }
      
    
    //      
      var str = "<tr>";
      if(count==0){
       str += "<td> <a href='#'>0</a> </td><td>";
      }else if(index>count||index<=0){
       str="<td style='color:blue;' >      </td>";
      }else if (count > 0) {
       str += "<td>";
       if(first>1){
        str += "&nbsp;&nbsp;<span  style='color:#4169E1;' >...</span>&nbsp;&nbsp;";
       }
       var i=1;
          for(i=first;i<=last; i++){
           if(i==index){
            str += "&nbsp;&nbsp;<a href='#'  style='color:#4169E1;' onclick='submit(" + i + ");'>[" + i+ "]</a>&nbsp;&nbsp;";
           }else{
         str += "&nbsp;&nbsp;<a href='#'  onclick='submit(" + i + ");'>" + i+ "</a>&nbsp;&nbsp;";
           }
       } 
        if(last<count){
         str += "&nbsp;&nbsp;<span  style='font-size:16px;color:#4169E1;' >...</span>&nbsp;&nbsp;"; 
        }
        str+="</td><td style='font-size: 14px;'> <a href='#first' style='color:#4169E1;font-size: 16px;' >"+ Num +"</a> </td>";
        /* if(index!=1){
         str +="<td style='width:60px;font-family:     ;font-size: 14px;' ><a href='#' id='prev'  onclick='submit(" + prev+ ");'>   </a></td>"; 
        }
        if(index<count){
         str +="<td style='width:60px;font-family:     ;font-size: 14px;'><a href='#'  id='next' onclick='submit("+ next + ");'>   </a></td>";
        }*/
        if(index!=1&&count>1){
         str += "<td style='width:40px;font-family:     ;font-size: 14px;white-space: nowrap;'>&nbsp;&nbsp;<a href='#' id='first' name='first' onclick='submit(1);'>  </a>&nbsp;&nbsp;</td>";
        }
        if(index!=count&&count>1&&index<count){
         str += "<td style='width:40px;font-family:     ;font-size: 14px;white-space: nowrap;'>&nbsp;&nbsp;<a href='#' onclick='submit(" + count+ ");'>  </a>&nbsp;&nbsp;</td>" ;
        } 
         str+="</tr>";
      }