Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung der in jQuery gekapselten Paging-Komponente

Ausführliche Erläuterung der in jQuery gekapselten Paging-Komponente

小云云
小云云Original
2018-01-06 10:05:111741Durchsuche

Da das Projekt einen Paging-Effekt erzielen musste, habe ich in der jQuery-Plug-in-Bibliothek danach gesucht, aber den gewünschten Effekt nicht finden können, also habe ich selbst eine Paging-Komponente gekapselt. In diesem Artikel wird hauptsächlich die auf der jQuery-Kapselung basierende Paging-Komponente vorgestellt. Ich hoffe, dass sie für alle hilfreich ist.

Idee:

Basiert hauptsächlich auf der vom Prototyp während der Initialisierung erstellten Paging-Vorlage und der anschließenden Bindung dynamischer Ereignisse, um den Paging-Effekt der Aktualisierung des DOM zu erzielen.

1.page.init.css


@charset "utf=8";
*{
 box-sizing: border-box;
 padding: 0;
 margin: 0;
}
.page{
 font-size: 13px;
 text-align: right;
}
.page .page_to{
 display: inline-block;
 max-width: 250px;
}
.page .page_to li{
 display: inline-block;
 width: auto;
 height: auto;
 border: 1px solid #ddd;
 padding:5px 10px;
 border-left-width: 0;
 color: #323232;
 cursor: pointer;
}
.page .page_to li.page_hide{
 display: none;
}
.page .page_to li:hover{
 color: #32C2CD;
 background-color: #f4f4f4;
 border-color: #DDDDDD;
}
.page .page_to li:first-child{
 border-left-width: 1px;
}
.page .page_jump{
 display: inline-block;
 width: 180px;
}
.page .page_jump input.page_jump_input{
 width: 52px;
 height: 28px;
 text-align: center;
 text-decoration: none;
 background-color: #fff;
 border: 1px solid #ddd;
 margin:0 4px;
}
.page .page_jump input.page_jump_btn{
 display: inline-block;
 padding: 7px 20px;
 margin-left: 5px;
 font-size: 14px;
 font-weight: 400;
 line-height: 1.42857143;
 text-align: center;
 white-space: nowrap;
 vertical-align: middle;
 -ms-touch-action: manipulation;
 touch-action: manipulation;
 cursor: pointer;
 -webkit-user-select: none;
 -moz-user-select: none;
 -ms-user-select: none;
 user-select: none;
 border: 1px solid transparent;
 border-radius: 4px;
 background-color: #00BB9C;
 color: #FFFFFF;
 font-weight: bold;
}

2.pageInit.js


/**
 * Created: 2017/6/20.
 * author: Aaron
 * address: http://www.cnblogs.com/aaron-pan/
 */
(function($,window,undefined){

 var curPage='',
 //跳转是否有值
 jumpVal='',
 //从DOM中重新获取数据总数/总页数
 lists='',
 totals='',
 //是否返回值
 isTrue=false;

 var Page=function(opts){
 this.settings= $.extend({},Page.defaults,opts);
 curPage=this.settings.initPage;
 totals=this.settings.totalPages;
 jumpVal=this.settings.inputVal;
 this.init();
 };

 //默认配置
 Page.defaults={
 container:'.page',
 setPos:'body',
 totalPages:null,
 totalLists:null,
 initPage:1,
 inputVal:1,
 callBack:null
 };

 Page.prototype={
 init:function(){
  this.create();
 },
 create:function(){
  var _template=&#39;<p class="page">&#39;+
  &#39;<span class="page_details">&#39;+
  &#39;共<span class="page_num">&#39;+this.settings.totalLists+&#39;</span>条记录,&#39;+
  &#39;第<span class="page_current">&#39;+curPage+&#39;</span>/&#39;+
  &#39;<span class="page_size">&#39;+this.settings.totalPages+&#39;</span>页&#39;+
  &#39;</span>&#39;+
  &#39;<p class="page_to">&#39;+
  &#39;<ul class="flex_parent">&#39;+
  &#39;<li class="page_first flex_child">首页</li>&#39;+
  &#39;<li class="page_pre page_hide flex_child">« 上一页</li>&#39;+
  &#39;<li class="page_next flex_child">下一页 »</li>&#39;+
  &#39;<li class="page_last flex_child">末页</li>&#39;+
  &#39;</ul>&#39;+
  &#39;</p>&#39;+
  &#39;<p class="page_jump">&#39;+
  &#39;<span>第:<input type="number" class="page_jump_input" value="&#39;+this.settings.inputVal+&#39;">页</span>&#39;+
  &#39;<input type="button" class="page_jump_btn" value="Go">&#39;+
  &#39;</p>&#39;+
  &#39;</p>&#39;;
  $(this.settings.setPos).append(_template);
  this.refreshDom();
  this.bindEvent();
 },
 bindEvent:function(){
  var _this=this;
  //跳转首页
  $(this.settings.container).on("click",".page_first",function(){

  lists=$(_this.settings.container).find(".page_num").text();
  totals=$(_this.settings.container).find(".page_size").text();

  if($.isFunction(_this.settings.callBack)){
   curPage=1;
   isTrue=_this.settings.callBack(1);
   if(isTrue){
   _this.refreshDom();
   $(_this.settings.container).find(".page_current").text(1);
   $(_this.settings.container).find(".page_jump_input").val(curPage);
   }
  }
  });
  //跳转上一页
  $(this.settings.container).on("click",".page_pre",function(){

  lists=$(_this.settings.container).find(".page_num").text();
  totals=$(_this.settings.container).find(".page_size").text();

  if($.isFunction(_this.settings.callBack)){
   if(curPage>1){
   curPage=curPage-1;
   isTrue=_this.settings.callBack(curPage);
   if(isTrue){
    _this.refreshDom();
    $(_this.settings.container).find(".page_current").text(curPage);
    $(_this.settings.container).find(".page_jump_input").val(curPage);
   }
   }
  }
  });
  //跳转下一页
  $(this.settings.container).on("click",".page_next",function(){

  lists=$(_this.settings.container).find(".page_num").text();
  totals=$(_this.settings.container).find(".page_size").text();


  if($.isFunction(_this.settings.callBack)){
   if(curPage<totals){
   curPage=curPage+1;
   isTrue=_this.settings.callBack(curPage);
   if(isTrue){
    _this.refreshDom();
    $(_this.settings.container).find(".page_current").text(curPage);
    $(_this.settings.container).find(".page_jump_input").val(curPage);
   }
   }
  }
  });
  //跳转末页
  $(this.settings.container).on("click",".page_last",function(){

  lists=$(_this.settings.container).find(".page_num").text();
  totals=$(_this.settings.container).find(".page_size").text();

  if($.isFunction(_this.settings.callBack)){
   curPage=totals;
   isTrue=_this.settings.callBack(curPage);
   if(isTrue){
   _this.refreshDom();
   $(_this.settings.container).find(".page_current").text(totals);
   $(_this.settings.container).find(".page_jump_input").val(curPage);
   }
  }
  });
  //Go跳转
  $(this.settings.container).on("click",".page_jump_btn",function(){

  lists=$(_this.settings.container).find(".page_num").text();
  totals=$(_this.settings.container).find(".page_size").text();

  if($.isFunction(_this.settings.callBack)){
   jumpVal=Number($(_this.settings.container).find("input.page_jump_input").val());
   console.log(&#39;跳转的页数:&#39;+jumpVal+&#39;;跳转之前的页数:&#39;+curPage);
   if(jumpVal>=1 && jumpVal <=totals){
   curPage=jumpVal;
   isTrue=_this.settings.callBack(curPage);
   if(isTrue){
    _this.refreshDom();
    $(_this.settings.container).find(".page_current").text(curPage);
   }
   }else{
   jumpVal=curPage;
   }
  }
  });
 },
 refreshDom:function(){
  $(this.settings.container).find("li.flex_child").removeClass("page_hide");
  if(Number(totals)==1){
  $(this.settings.container).find(".page_pre").addClass("page_hide");
  $(this.settings.container).find(".page_next").addClass("page_hide");
  }
  else if(Number(totals)==2){
  if(Number(curPage)==1){
   $(this.settings.container).find(".page_pre").addClass("page_hide");
  }else{
   $(this.settings.container).find(".page_next").addClass("page_hide");
  }
  }
  else if(Number(curPage)==1 && Number(totals)>2){
  $(this.settings.container).find(".page_pre").addClass("page_hide");
  }
  else if(Number(curPage)==Number(totals) && Number(totals)>2){
  $(this.settings.container).find(".page_next").addClass("page_hide");
  }
 }
 };

 var pageInit=function(opts){
 return new Page(opts);
 };

 window.pageInit= $.pageInit=pageInit;

})(jQuery,window,undefined);

3. Die Komponente ruft

auf, um die Initialisierung der Paging-Komponente über window.pageInit= $.pageInit=pageInit abzuschließen.

Die offengelegten Schnittstellen sind:

1.container: DOM-Container, default.page

2.setPos: Von DOM platzierte HTML-Position, Standardtext

3.totalPages: Standardanzahl der Seiten, erforderlich, Standardwert null

4.totalLists: Standardgesamtzahl der Daten, erforderlich, Standardwert null

5.initPage: Aktuelle Seite, standardmäßige erste Seite

6.inputVal: Sprungseite, standardmäßig erste Seite

7.callBack: Ausgeführte Rückruffunktion, erforderlich, Standard null


<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>基于jQuery封装的分页组件</title>
 <link rel="stylesheet" href="css/page.init.css">
</head>
<body>
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.js"></script>
<script src="js/pageInit.js"></script>
<script>
 $.pageInit(
  {
  container:&#39;.page&#39;,//容器:默认page
  //setPos:&#39;body&#39;,//放置位置:默认body
  totalPages:10,//总页数:必填
  totalLists:100,//数据总数:必填
  initPage:1,//初始页码:默认1
  inputVal:1,//设置跳转的input值:默认1
  //要执行的函数:默认null,必须为fn且返回true则可执行分页,false则不执行
  callBack:function(n){
   var flag=true;
   console.log(n);
   return flag;
  }
  }
 );
</script>
</body>
</html>

Wirkung:

Fügen Sie die Funktionen hinzu, die Sie über die CallBack-Schnittstelle ausführen müssen, und führen Sie nur dann ein dynamisches DOM-Rendering durch, wenn true erforderlich ist.

Für weitere spannende Inhalte klicken Sie bitte auf: Zusammenfassung der JQuery-Paging-Funktion, um mehr zu erfahren.

Verwandte Empfehlungen:

JQuery-gekapselter Platzhalter-Beispielcode

Ein js-Paging basierend auf jquery encapsulation_jquery

Jquery-gekapseltes Dialogfeld, einfache Implementierung_jquery

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der in jQuery gekapselten Paging-Komponente. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:jQuery-AuswahlmethodeNächster Artikel:jQuery-Auswahlmethode