您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關利用jQuery怎么封裝一個分頁組件,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
思路:
主要是初始化時基于原型建立的分頁模板然后綁定動態事件并實現刷新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; }
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='<div class="page">'+ '<span class="page_details">'+ '共<span class="page_num">'+this.settings.totalLists+'</span>條記錄,'+ '第<span class="page_current">'+curPage+'</span>/'+ '<span class="page_size">'+this.settings.totalPages+'</span>頁'+ '</span>'+ '<div class="page_to">'+ '<ul class="flex_parent">'+ '<li class="page_first flex_child">首頁</li>'+ '<li class="page_pre page_hide flex_child">« 上一頁</li>'+ '<li class="page_next flex_child">下一頁 »</li>'+ '<li class="page_last flex_child">末頁</li>'+ '</ul>'+ '</div>'+ '<div class="page_jump">'+ '<span>第:<input type="number" class="page_jump_input" value="'+this.settings.inputVal+'">頁</span>'+ '<input type="button" class="page_jump_btn" value="Go">'+ '</div>'+ '</div>'; $(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('跳轉的頁數:'+jumpVal+';跳轉之前的頁數:'+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.組件調用
通過 window.pageInit= $.pageInit=pageInit 可完成分頁組件初始化。
暴露出來的接口分別為:
1.container:DOM的容器,默認.page
2.setPos:DOM放置的HTML位置,默認body
3.totalPages:默認的頁數,必填,默認null
4.totalLists:默認的數據總數,必填,默認null
5.initPage:當前頁,默認第一頁
6.inputVal:跳轉頁,默認第一頁
7.callBack:執行的回調函數,必填,默認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:'.page',//容器:默認page //setPos:'body',//放置位置:默認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>
效果:
通過callBack接口,添加自己所需要執行的function函數,并且需要return true時才回執行動態的DOM渲染。
看完上述內容,你們對利用jQuery怎么封裝一個分頁組件有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。