/** * slider v2 base on jquery * you can sent bug to hujf608@163.com * author : junlin * date : 2013/10/22 */ //main function var linslide = function(){ this.step = null; this.focusboxid = null; this.contentdiv = null; this.action = 'soon'; this.autoplay = false; this.timer = 5000; this.steptime = 1000; this.rbtnid = null; this.lbtnid = null; this.btnid = null; this.btnsondiv = null; this.btnsondivhover = null; this.debug = false; this.curitemid = null; this.totitemid = null; this.cycleflag = true; this.showitemnum = 1; this.humanfix = 0; this.humanfixmulty = 0; this.hoverstop = false; this.callback = false; } linslide.prototype={ lis : null, lissize : null, fli : null, eli : null, curitem : 0, curbtnitem : 0, mflag : null, autoplayer : null, btnlistflag : false, lbtnflag : false, rbtnflag : false, curitemshowflag : false, _init : function (){ var that = this; this.lis = $(this.focusboxid).children(this.contentdiv); this.lissize = this.lis.size(); if(this.showitemnum>1){this.cycleflag=false;} this.curitem = 0; this.curbtnitem = 0; this.mflag = true; this.actioninit(); this.btninit(); this.hoverstopinit(); if(this.totitemid&&this.objcheck(this.totitemid)){$(this.totitemid).html(this.lissize);} if(this.autoplay){this.autoplayer = settimeout(function(){that.doaction('next')},that.timer);} if(this.humanfix!=0){ var myos = otherext.getos(); var humanfixarr = this.humanfix.split('#'); for(v in humanfixarr){ var varr = humanfixarr[v].split('|'); if(varr[1]==myos){ this.humanfix = parsefloat(varr[0]); break; }else{ this.humanfix = 0; } } } if(this.humanfixmulty!=0){ var myos = otherext.getos(); var humanfixmultyarr = this.humanfixmulty.split('#'); for(v in humanfixmultyarr){ var varr = humanfixmultyarr[v].split('|'); if(varr[1]==myos){ this.humanfixmulty = parsefloat(varr[0]); break; }else{ this.humanfixmulty = 0; } } } }, hoverstopinit : function(){ var that = this; if(this.hoverstop&&this.autoplay) { if(this.lbtnflag){$(this.lbtnid).live({mouseover:function(){cleartimeout(that.autoplayer);},mouseout:function(){cleartimeout(that.autoplayer);that.autoplayer = settimeout(function(){that.doaction('next')},that.timer);}})} if(this.rbtnflag){$(this.rbtnid).live({mouseover:function(){cleartimeout(that.autoplayer);},mouseout:function(){cleartimeout(that.autoplayer);that.autoplayer = settimeout(function(){that.doaction('next')},that.timer);}})} if(this.btnlistflag){$(this.btnid).live({mouseover:function(){cleartimeout(that.autoplayer);},mouseout:function(){cleartimeout(that.autoplayer);that.autoplayer = settimeout(function(){that.doaction('next')},that.timer);}})} $(this.focusboxid).live({mouseover:function(){cleartimeout(that.autoplayer);},mouseout:function(){cleartimeout(that.autoplayer);that.autoplayer = settimeout(function(){that.doaction('next')},that.timer);}}); } }, btninit : function(){ var that = this; if(this.lbtnflag){$(this.lbtnid).live('click',function(){that.doaction('prev');});} if(this.rbtnflag){$(this.rbtnid).live('click',function(){that.doaction('next');});} if(this.btnlistflag) { $(this.btnid).children(this.btnsondiv).bind('click',function(){ var pos = $(this).prevall(that.btnsondiv).size(); that.doactionmulty(pos); }); } }, actioninit : function(){ switch(this.action) { case 'scrollx':slideext.actinitscroll(this,'x');break; case 'scrolly':slideext.actinitscroll(this,'y');break; case 'fade':slideext.actinitfadesoon(this);break; case 'fastfade':slideext.actinitfadesoon(this,true);break; case 'soon':slideext.actinitfadesoon(this);break; default:alert('未知特效,请检查您的action参数配置'); } }, run : function(){ if(this.lbtnid&&this.objcheck(this.lbtnid)){this.lbtnflag=true;} if(this.rbtnid&&this.objcheck(this.rbtnid)){this.rbtnflag=true;} if(this.focusboxid==null&&this.debug&&this.objcheck(this.focusboxid)){alert('滑动内容id:focusboxid 未设置或获取不到对象');} if(this.contentdiv==null&&this.debug&&this.objcheck(this.contentdiv)){alert('滑动内容子级标签:contentdiv 未设置或获取不到对象');} if(this.step==null&&this.debug&&(this.action=='scrollx'||this.action=='scrolly')){alert('每步滑动距离:step 未设置');} if(this.curitemid&&this.objcheck(this.curitemid)) { $(this.curitemid).html(this.curitem+1);this.curitemshowflag=true; } if(this.btnid&&this.objcheck(this.btnid)) { if(this.btnsondiv==null&&this.debug){alert('小按钮标签:btnsondiv 未设置');} if(this.btnsondivhover==null&&this.debug){alert('小按钮标签选中类:btnsondivhover 未设置');} this.btnlistflag = true; } this._init(); }, doaction : function(operate){ switch(this.action) { case 'scrollx': this.fscrollx(operate);break; case 'scrolly': this.fscrolly(operate);break; case 'fade': this.ffade(operate);break; case 'fastfade': this.ffade(operate,true);break; case 'soon': this.fsoon(operate);break; default:this.fscrollx(operate); } }, doactionmulty : function(pos){ switch(this.action) { case 'scrollx': this.fscrollmultyx(pos);break; case 'scrolly': this.fscrollmultyy(pos);break; case 'fade': this.ffademulty(pos);break; case 'fastfade': this.ffademulty(pos,true);break; case 'soon': this.fsoonmulty(pos);break; default:this.fscrollxmultx(pos); } }, objcheck : function(div){ var obj = $(div); return ('object'==typeof(obj))?true:false; }, btnlistoperate : function(pos){ if(this.btnlistflag) { var curpos = pos==undefined?this.curbtnitem:pos; $(this.btnid).children(this.btnsondiv).removeclass(this.btnsondivhover).eq(curpos).addclass(this.btnsondivhover); } }, itemshow : function(){ if(this.curitemshowflag) { $(this.curitemid).html(this.curbtnitem+1); } }, callcbfunction : function(){ if(false!=this.callback&&'function'==typeof(this.callback)){ this.callback(); } }, factionready : function(){ var that = this; this.callcbfunction(); this.itemshow(); this.mflag = true; if(this.autoplay){this.autoplayer = settimeout(function(){that.doaction('next')},that.timer);} }, fscrollx : function(operate){ if(this.mflag){this.mflag=false;}else{return} slideext.scrollxy(this,operate,'left'); }, fscrollmultyx : function(pos){ if(this.mflag){this.mflag=false;}else{return} slideext.scrollxymulty(this,'left',pos); }, fscrolly : function(operate){ if(this.mflag){this.mflag=false;}else{return} slideext.scrollxy(this,operate,'top'); }, fscrollmultyy : function(pos){ if(this.mflag){this.mflag=false;}else{return} slideext.scrollxymulty(this,'top',pos); }, ffade : function(operate,isfastfade){ if(this.mflag){this.mflag=false;}else{return} var that = this; slideext.itemoperatefadesoon(this,operate); var tmpheight = this.lis.eq(this.curitem).height(); $(this.focusboxid).css('height',tmpheight); (true===isfastfade)?this.lis.hide():this.lis.fadeout(this.steptime); this.lis.eq(this.curitem).fadein(this.steptime,function(){ that.factionready(); }); }, ffademulty : function(pos,isfastfade){ if(this.mflag){this.mflag=false;}else{return} var that = this; if(this.autoplay){cleartimeout(this.autoplayer);} var tmpheight = this.lis.eq(pos).height(); $(this.focusboxid).css('height',tmpheight); (true===isfastfade)?this.lis.hide():this.lis.fadeout(this.steptime); this.btnlistoperate(pos); this.lis.eq(pos).fadein(this.steptime,function(){ that.curbtnitem = that.curitem = pos; that.factionready(); }); }, fsoon : function(operate){ if(this.mflag){this.mflag=false;}else{return} var that = this; slideext.itemoperatefadesoon(this,operate); this.lis.hide(); this.lis.eq(this.curitem).show(); this.factionready(); }, fsoonmulty : function(pos){ if(this.mflag){this.mflag=false;}else{return} var that = this; if(this.autoplay){cleartimeout(this.autoplayer);} this.lis.hide(); this.lis.eq(pos).show(); this.btnlistoperate(pos); this.curbtnitem = this.curitem = pos; this.factionready(); } } //extension function slideext = { actinitscroll : function(that,scroll){ var lr,hw,divfloat,fpos=0; if(that.cycleflag){ that.fli = that.lis.eq(0); that.eli = that.lis.eq(that.lissize-1); $(that.focusboxid).append('<'+that.contentdiv+'>'+that.fli.html()+''); $(that.focusboxid).html('<'+that.contentdiv+'>'+that.eli.html()+''+$(that.focusboxid).html()); fpos=that.step; } if(scroll=='y'){lr='top';hw='height';divfloat='none';}else{lr='left';hw='width';divfloat='left';} $(that.focusboxid).children(that.contentdiv).css('float',divfloat); $(that.focusboxid).css('position','absolute'); $(that.focusboxid).css(hw,'39000px'); $(that.focusboxid).css(lr,'-'+fpos+'px'); }, actinitfadesoon : function(that,isfastfade){ if(true===isfastfade){ that.lis.css('position','relative'); }else{ that.lis.css('position','absolute'); that.lis.css('left','0px'); } that.lis.hide().eq(0).show(); window.onresize = function() { $(that.focusboxid).css('height',0); } }, itemoperatefadesoon : function(that,operate){ if(that.autoplay){cleartimeout(that.autoplayer);} if(operate=='prev'){ that.curitem--; that.curbtnitem--; }else{ that.curitem++; that.curbtnitem++; } if(that.curitem>=that.lissize){ that.curitem = 0; }else if(that.curitem<0){ that.curitem = that.lissize-1; } if(that.curbtnitem>=that.lissize){ that.curbtnitem = 0; }else if(that.curbtnitem<0){ that.curbtnitem = that.lissize-1; } that.btnlistoperate(); }, scrollxy : function(that,operate,lt){ var poslt; if(that.autoplay){cleartimeout(that.autoplayer);} if(operate=='prev'){ if(!that.cycleflag){ if(that.curbtnitem<=0){ that.factionready(); return; } } var mstep = that.step; that.curitem++; that.curbtnitem--; }else{ if(!that.cycleflag){ if((that.curbtnitem+that.showitemnum)>that.lissize-1){ that.factionready(); return; } } var mstep =-that.step; that.curitem--; that.curbtnitem++; } if(that.curbtnitem>=that.lissize){ that.curbtnitem = 0; }else if(that.curbtnitem<0){ that.curbtnitem = that.lissize-1; } that.btnlistoperate(); if(lt=='top'){ poslt = $(that.focusboxid).position().top; $(that.focusboxid).animate({'top':poslt+mstep+that.humanfix+'px'},that.steptime,function(){ slideext.afterscroll(that,lt); }); }else{ poslt = $(that.focusboxid).position().left; $(that.focusboxid).animate({'left':poslt+mstep+that.humanfix+'px'},that.steptime,function(){ slideext.afterscroll(that,lt); }); } }, scrollxymulty : function(that,lt,pos){ if(that.autoplay){cleartimeout(that.autoplayer);} that.btnlistoperate(pos); if(lt=='top'){ $(that.focusboxid).animate({'top':-(pos*that.step)-that.step+that.humanfixmulty+'px'},that.steptime,function(){ slideext.afterscrollmulty(that,pos); }); }else{ $(that.focusboxid).animate({'left':-(pos*that.step)-that.step+that.humanfixmulty+'px'},that.steptime,function(){ slideext.afterscrollmulty(that,pos); }); } }, afterscroll : function(that,lt){ if(that.curitem<-that.lissize+1){ that.curitem = 0; $(that.focusboxid).css(lt,'-'+that.step+'px'); }else if(that.curitem>0){ that.curitem = -that.lissize+1; $(that.focusboxid).css(lt,'-'+(that.step*(that.lissize))+'px'); } that.factionready(); }, afterscrollmulty : function(that,pos){ that.curbtnitem = pos; that.curitem = -that.curbtnitem; that.factionready(); } } //other extension otherext = { getos : function() { if(navigator.useragent.indexof("msie")>0) { if(navigator.useragent.indexof("msie 6.0")>0) { return "msie6"; } if(navigator.useragent.indexof("msie 7.0")>0) { return "msie7"; } if(navigator.useragent.indexof("msie 8.0")>0) { return "msie8"; } if(navigator.useragent.indexof("msie 9.0")>0) { return "msie9"; } } if(isfirefox=navigator.useragent.indexof("firefox")>0){ return "firefox"; } if(issafari=navigator.useragent.indexof("safari")>0) { return "safari"; } if(iscamino=navigator.useragent.indexof("camino")>0){ return "camino"; } if(ismozilla=navigator.useragent.indexof("gecko/")>0){ return "gecko"; } } }