123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- ;(function($){
- var methods = {
- pageInit: function(options){
- /**
- * [opts this plug propertys]
- * @type {Obeject}
- */
- var opts = $.extend({},$.fn.zPager.defaults,options);
- return $(this).each(function(k,v){
- var _v = $(v);
- _v.data("options",opts);
- methods.pageData(_v, opts.current);
- })
- },
- pageData: function(_v, _current){
- var opts = _v.data("options");
- var t = opts.totalData, p = opts.pageData, ajaxOpts = null;
- if(opts.ajaxSetData&&(typeof(opts.ajaxSetData)==='boolean')){
- if(opts.url!=='' && typeof(opts.url)==='string'){
- ajaxOpts = methods.ajaxData(opts.url, _current);
- t = opts.totalData = ajaxOpts.total;
- if(ajaxOpts.rows.length>0){
- var ishasDataRender = (opts.dataRender && typeof(opts.dataRender)==='function');
- ishasDataRender ? opts.dataRender(ajaxOpts.rows) : methods.dataRender(_v, ajaxOpts.rows);
- }
- }else{
- $.pageError(2);
- }
- }
- if(t%p === 0){
- opts.pageCount = parseInt(t/p);
- }else{
- opts.pageCount = parseInt(t/p)+1;
- }
- if(opts.pageCount>0){
- _v.data("options",opts);
- methods.pageRender(_v, _current);
- }
- },
- dataRender: function(_v, _data){
-
- var opts = _v.data("options");
- var cells = '';
- for(var i=0;i<_data.length;i++){
- cells += '<div class="cc_cells"><a href=""><span>'+_data[i].id+'-'+Math.random()+'</span>';
- cells += '<span>'+_data[i].title+'</span>';
- cells += '<span>'+_data[i].starttime+'</span>';
- cells += '<span>'+_data[i].endtime+'</span>';
- cells += '</a></div>';
- }
- if(opts.htmlBox===''||(typeof(opts.htmlBox)!=='Obeject')){
- var abx = _v.prev();
- if(!abx.hasClass('pagerHtmlWrap')){
- var d = '<div class="pagerHtmlWrap"></div>';
- _v.before(d);
- }
- _v.prev().html(cells);
- }else{
- opts.htmlBox.html(cells);
- }
- },
- pageRender: function(_v, _current){
- // 页码操作
- currentPage(_current);
-
- /**
- * [o this plug propertys]
- * @type {Obeject}
- */
- var o = _v.data("options");
- var _page = o.pageCount;
- var _middle = parseInt(o.pageStep/2);
- var _tep = _middle-2;
- var _html = '';
- if(_page>o.pageStep&&_current<=_page){
- _html += methods.setPrevNext(o, 'prev');
- if(_current<=_middle){
- _html += methods.forEach(1, o.pageStep, _current, o.active);
- _html += methods.elliPsis();
- }else if(_current>_middle&&_current<(_page-_tep)){
- _html += methods.pageBtn(1);
- _html += methods.elliPsis();
- _html += methods.forEach(_current-_tep, _current-(-_tep)-(-1), _current, o.active);
- _html += methods.elliPsis();
- }else if(_current>=(_page-_tep)){
- _html += methods.pageBtn(1);
- _html += methods.elliPsis();
- _html += methods.forEach(_page-2*_tep-1, _page-(-1), _current, o.active);
- }
- _html += methods.setPrevNext(o, 'next');
- }else if(_page<=o.pageStep){
- if(_page>o.minPage){
- _html += methods.setPrevNext(o, 'prev');
- }
- _html += methods.forEach(1, _page-(-1), _current, o.active);
- if(_page>o.minPage){
- _html += methods.setPrevNext(o, 'next');
- }
- }
- _v.html(_html);
- methods.bindEvent(_v);
- },
- bindEvent: function(_v){
- /**
- * [o this plug propertys]
- * @type {Obeject}
- */
- var o = _v.data("options");
- var _a = _v.find("a");
- $.each(_a,function(index,item){
- var _this = $(this);
- _this.on("click",function(){
- if(_this.attr("disabled")){
- return false;
- }
- var _p = _this.attr("page-id");
- o.current = _p;
- _v.data("options",o);
- // methods.options.current = _p;
- methods.pageData(_v, _p);
- })
- })
- },
- forEach: function(_start,length,_current,curclass){
- /**
- * [s page elements]
- * @type {String}
- */
- var s = '';
- for(var i = _start;i<length;i++){
- if(i === parseInt(_current)){
- s += methods.pageCurrent(i,curclass);
- }else{
- s += methods.pageBtn(i);
- }
- }
- return s;
- },
- pageCurrent: function(_id,_class){
- /**
- * [class current page element calss]
- * @type {String}
- */
- return '<span class="'+_class+'" page-id="'+_id+'">'+_id+'</span>';
- },
- elliPsis: function(){
- /**
- * [class ellipses...]
- * @type {String}
- */
- return '<span class="els">...</span>';
- },
- pageBtn: function(_id){
- /**
- * [id page id]
- * @type {String}
- */
- return '<a page-id="'+_id+'">'+_id+'</a>';
- },
- addBtn: function(_property, _page, _count){
- /**
- * [disabled is it can click button]
- * @type {Boolean}
- */
- var disabled = '';
- if(_count){
- disabled = (_page === 0 || _page === _count-(-1)) ? 'disabled="true"':'';
- }
- return '<a class="'+_property+'" page-id="'+_page+'" '+disabled+'></a>';
- },
- setPrevNext: function(_o, _type){
- /**
- * [s string create prev or next buttons elements]
- * @type {String}
- */
- var s = '';
- function prev(){
- if(_o.btnShow){
- s += methods.addBtn(_o.firstBtn, 1);
- }
- if(_o.btnBool){
- s += methods.addBtn(_o.prevBtn, _o.current-1, _o.pageCount);
- }
- return s;
- }
- function next(){
- if(_o.btnBool){
- s += methods.addBtn(_o.nextBtn, _o.current-(-1), _o.pageCount);
- }
- if(_o.btnShow){
- s += methods.addBtn(_o.lastBtn, _o.pageCount);
- }
- return s;
- }
- return _type==='prev'? prev(): next();
- },
- ajaxData: function(_url, _current){
- /**
- * [ajax get data and pagenumber]
- * @param {Object} ){ var parms [ajax url,current page number]
- * @return {[type]} [obj total rows]
- */
- var _total = $.fn.zPager.defaults.totalData;
- return (function(){
- var parms = {'total':_total,'rows':[]};
- $.ajax({
- url: _url,
- type: 'get',
- data: {"page":_current},
- dataType: 'json',
- cache : false,
- async : false,
- success: function(data) {
- if(data.total && (data.total!==0)){
- parms['total'] = data.total;
- parms['rows'] = data.rows;
- }else{
- $.pageError(3);
- }
- },
- error: function(XMLHttpRequest,textStatus,errorThrown) {
- var msg = '';
- switch(XMLHttpRequest.readyState){
- case 0:
- msg = '(未初始化)还没有调用send()方法';
- break;
- case 1:
- msg = '(载入)已调用send()方法,正在发送请求';
- break;
- case 2:
- msg = '(载入完成)send()方法执行完成,已经接收到全部响应内容';
- break;
- case 3:
- msg = '(交互)正在解析响应内容';
- break;
- case 4:
- msg = '(完成)响应内容解析完成,可以在客户端调用了';
- break;
- }
- console.log(textStatus+':'+XMLHttpRequest.readyState+'-'+msg);
- }
- })
- return parms;
- })();
- }
- }
- $.extend({
- pageError:function(type){
- /**
- * [switch error type]
- * @param {[type]} type [no this function]
- * @return {[type]} [ajax error]
- */
- switch(type){
- case 1:
- console.log('method'+method+'dose not exist on jQuery.zPager');
- break;
- case 2:
- console.log('no ajax');
- break;
- case 3:
- console.log('no data');
- break;
- default:
- console.log('default error');
- }
- }
- })
- $.fn.extend({
- zPager:function(method){
- /**
- * [if has this method]
- * @param {[type]} methods[method] [apply this method]
- * @return {[type]} [return property]
- */
- if(methods[method]){
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
- }else if(typeof method === 'object' || !method){
- return methods.pageInit.apply(this, arguments);
- }else{
- $.pageError(1);
- }
- }
- })
- $.fn.zPager.defaults = {
- totalData: 10, //数据总条数
- pageData: 5, //每页数据条数
- pageCount: 0, //总页数
- current: 1, //当前页码数
- pageStep: 8, //当前可见最多页码个数
- minPage: 5, //最小页码数,页码小于此数值则不显示上下分页按钮
- active: 'current', //当前页码样式
- prevBtn: 'pg-prev', //上一页按钮
- nextBtn: 'pg-next', //下一页按钮
- btnBool: true, //是否显示上一页下一页
- firstBtn: 'pg-first', //第一页按钮
- lastBtn: 'pg-last', //最后一页按钮
- btnShow: true, //是否显示第一页和最后一页按钮
- disabled: true, //按钮失效样式
- ajaxSetData: true, //是否使用ajax获取数据 此属性为真时需要url和htmlBox不为空
- url: '', //ajax路由
- htmlBox: '' //ajax数据写入容器
- }
- })(jQuery)
|