/** * 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"; } }}