Maison > interface Web > js tutoriel > Explication détaillée du composant de pagination encapsulé jQuery

Explication détaillée du composant de pagination encapsulé jQuery

小云云
Libérer: 2018-01-06 10:05:11
original
1788 Les gens l'ont consulté

Comme le projet devait obtenir un effet de pagination, je l'ai recherché dans la bibliothèque de plug-ins jQuery, mais je n'ai pas trouvé l'effet que je voulais, j'ai donc encapsulé moi-même un composant de pagination. Cet article présente principalement en détail le composant de pagination basé sur l'encapsulation jQuery. Les amis intéressés peuvent s'y référer. J'espère qu'il pourra vous aider.

Idée :

Principalement basé sur le modèle de pagination établi par le prototype lors de l'initialisation, puis liant des événements dynamiques pour obtenir l'effet de pagination consistant à actualiser le DOM.

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;
}
Copier après la connexion

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);
Copier après la connexion

3. Le composant appelle

pour terminer l'initialisation du composant de pagination via window.pageInit= $.pageInit=pageInit.

Les interfaces exposées sont :

1.container : conteneur DOM, default.page

2.setPos : position HTML placée par DOM, corps par défaut

3.totalPages : nombre de pages par défaut, requis, null par défaut

4.totalLists : nombre total de données par défaut, requis, null par défaut

5.initPage : page actuelle, première page par défaut

6.inputVal : page de saut, première page par défaut

7.callBack : fonction de rappel exécutée, obligatoire, null par défaut


<!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>
Copier après la connexion

Effet :

Ajoutez les fonctions que vous devez exécuter via l'interface de rappel et effectuez un rendu DOM dynamique uniquement lorsque true est requis.

Pour un contenu plus passionnant, veuillez cliquer sur : résumé de la fonction de pagination jquery pour en savoir plus.

Recommandations associées :

Exemple de code d'espace réservé encapsulé par JQuery

Une pagination js basée sur jquery encapsulation_jquery

Boîte de dialogue encapsulée Jquery simple Implementation_jquery

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal