127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
|
define(["avalon","text!./pages.tpl","css!./pages.css"], function (av, tpl) {
|
|||
|
|
|||
|
var widget = av.ui.pages = function(ele, data, vms){
|
|||
|
|
|||
|
var opts = av.mix({}, data.pagesOptions);
|
|||
|
var height = opts.height || '',
|
|||
|
skin = opts.skin || 'default';
|
|||
|
|
|||
|
delete opts.skin;
|
|||
|
delete opts.height;
|
|||
|
opts.pages = []; //无论是否定义,都会清掉,有点暴力
|
|||
|
|
|||
|
opts.$id = data.pagesId;
|
|||
|
opts.$init = function(scan){
|
|||
|
ele.classList.add('widget-pages', 'skin-' + skin, 'do-fn-noselect');
|
|||
|
height && ele.classList.add(height);//非空时才添加,避免报错
|
|||
|
ele.innerHTML = tpl;
|
|||
|
calPages(Pager);
|
|||
|
scan()
|
|||
|
};
|
|||
|
opts.$remove = function() {
|
|||
|
ele.innerHTML = ''
|
|||
|
};
|
|||
|
opts.setUrl = function(id){
|
|||
|
if(!Pager.url || id === '...' || Pager.curr === id || id > Pager.total || id < 1)
|
|||
|
return 'javascript:;'
|
|||
|
return Pager.url.replace('{id}', id)
|
|||
|
};
|
|||
|
opts.onJump = function(event, id){
|
|||
|
event.preventDefault()
|
|||
|
id = id >> 0;
|
|||
|
jump(id, Pager);
|
|||
|
};
|
|||
|
opts.jumpPage = function(event){
|
|||
|
var pid = Pager.jumpTxt;
|
|||
|
if(pid > Pager.total)
|
|||
|
Pager.jumpTxt = Pager.total;
|
|||
|
|
|||
|
if(event.keyCode == 13)
|
|||
|
return jump(pid, Pager);
|
|||
|
}
|
|||
|
|
|||
|
var Pager = av.define(opts);
|
|||
|
|
|||
|
|
|||
|
Pager.$watch('total', function(v, old){
|
|||
|
Pager.total = v >> 0 || 1; //自动转换成数字类型,防止传入的值为字符串时报错,如 '3'
|
|||
|
old = old >> 0;
|
|||
|
(v !== old) && calPages(Pager);
|
|||
|
})
|
|||
|
|
|||
|
Pager.$watch('curr', function(v, old){
|
|||
|
v = v >> 0 || 1;//自动转换成数字类型
|
|||
|
old = old >> 0;
|
|||
|
Pager.curr = v;
|
|||
|
(v !== old) && calPages(Pager);
|
|||
|
})
|
|||
|
|
|||
|
return Pager;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* [calPages 计算要显示的页码数组,并赋值给pages]
|
|||
|
* @param {[type]} Pager [分页vm对象]
|
|||
|
*/
|
|||
|
function calPages(Pager){
|
|||
|
if(Pager.total < 2){
|
|||
|
Pager.pages.clear();
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var pageArr = [], len = (Pager.curr < Pager.max / 2) ? Pager.max : Math.floor(Pager.max / 2);
|
|||
|
|
|||
|
if(Pager.curr - len > 1)
|
|||
|
pageArr.push('...');
|
|||
|
|
|||
|
for(var i = Pager.curr - len; i < Pager.curr + len && i <= Pager.total; i++){
|
|||
|
if(i > 0)
|
|||
|
pageArr.push(i)
|
|||
|
}
|
|||
|
if(Pager.curr + len < Pager.total)
|
|||
|
pageArr.push('...');
|
|||
|
|
|||
|
Pager.pages = pageArr;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* [jump 内部跳转函数]
|
|||
|
* @param {[type]} id [要跳转去的页码]
|
|||
|
* @param {[type]} Pager [分页vm对象]
|
|||
|
*/
|
|||
|
function jump(id, Pager){
|
|||
|
if(id < 1)
|
|||
|
id = Pager.jumpTxt = 1;
|
|||
|
if(id > Pager.total)
|
|||
|
id = Pager.jumpTxt = Pager.total;
|
|||
|
if(Pager.curr === id)
|
|||
|
return;
|
|||
|
|
|||
|
Pager.curr = Pager.jumpTxt = id;
|
|||
|
Pager.callback && Pager.callback(id);
|
|||
|
|
|||
|
calPages(Pager);
|
|||
|
}
|
|||
|
|
|||
|
//默认参数
|
|||
|
widget.defaults = {
|
|||
|
curr: 1, //当前页
|
|||
|
total: 1, // 总页数默认为1,即页面上不会显示分页条
|
|||
|
max: 5, // 最多显示页码数
|
|||
|
url: 'javascript:;', //页码按钮上的url,如'#!/page-{id}.html',其中{id}会被替换成该页码
|
|||
|
pageJump: !1, //是否显示跳转表单
|
|||
|
simpleMode: !1, //简单模式,即只有上一页和下一页
|
|||
|
jumpTxt: 1, //跳转输入框显示的页码
|
|||
|
pages: [], //页码数组
|
|||
|
btns: { //除页码本身外的按钮上的字符
|
|||
|
prev: '<<',
|
|||
|
next: '>>',
|
|||
|
home: '首页',
|
|||
|
end: '末页'
|
|||
|
},
|
|||
|
callback: null //点击页码/上/下/首/末页的回调,页码无效或者为当前页的时候不会触发
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
return av;
|
|||
|
})
|