仿照jquery的方式实现的tabs和focus
时间:2011-05-31 来源:留痕
自己没事的时候写的小玩意,没有做过什么优化,很多地方不是很理想,期待有高人指点。
(function(W){
var ui=W.ui=function(json){
return ui.fn.init(json);
}
ui.fn=ui.prototype={
init:function(json){
var opt={
type:json.type || 'tabs',
id:json.id || 'tab',
contid:json.contid || 'tabcont',
maxnum:json.maxnum,
curclass:json.curclass || 'curr',
oent:json.oent || 'mouseover',
speed:json.speed || 2000
}
if(opt.type=='focus') return this.focus(opt);
else if(opt.type=='tabs') return this.tab(opt);
},
$:function(s){
return document.getElementById(s);
},
addEvent:function(obj,type,fn){
if(obj.addEventListener){
obj.addEventListener(type,fn,false);
}
else if(obj.attachEvent){
obj["e"+type+fn]=fn;
obj.attachEvent("on"+type,function(){ obj["e"+type+fn]()});
}
},
tab:function(opt){
var _this=this;
for(var i=0; i<opt.maxnum; i++){
var oj=this.$(opt.id+i);
oj.j=i;
this.addEvent(oj,opt.oent,function(){
_this.show(opt,this.j);
})
}
},
show:function(opt,j){
for(var i=0; i<opt.maxnum; i++){
this.$(opt.id+i).className=(i==j?this.$(opt.id+i).className+' '+opt.curclass:this.$(opt.id+i).className.replace(new RegExp(opt.curclass,'gi'),''));
this.$(opt.contid+i).style.display=(i==j?'':'none');
}
},
focus:function(opt){
var reset;
var _this=this;
var bpos=0;
var curnum=1;
function start(){
reset=setInterval(function(){
if(curnum>=opt.maxnum) curnum=0;
bpos=curnum;
_this.show(opt,curnum);
curnum++;
},opt.speed)
}
start();
for(var i=0; i<opt.maxnum; i++){
var oj=this.$(opt.id+i);
oj.j=i;
switch(opt.oent){
case 'click':
this.addEvent(this.$(opt.id+i),'click',function(){
_this.show(opt,this.j);
curnum=this.j;
})
this.addEvent(this.$(opt.id+i),'mouseover',function(){
clearInterval(reset);
})
break;
default:
this.addEvent(this.$(opt.id+i),'mouseover',function(){
clearInterval(reset);
_this.show(opt,this.j);
curnum=this.j;
})
}
this.addEvent(this.$(opt.id+i),'mouseout',function(){
start();
})
this.addEvent(this.$(opt.contid+i),'mouseover',function(){
clearInterval(reset);
})
this.addEvent(this.$(opt.contid+i),'mouseout',function(){
start();
})
}
}
}
ui.fn.init.prototype=ui.fn;
})(window);
相关阅读 更多 +










