(function($){ $.fn.slide=function(options){ $.fn.slide.defaults={ type:"slide", effect:"fade", autoplay:false, delaytime:500, intertime:2500, triggertime:150, defaultindex:0, titcell:".banner_li li", maincell:".bd", targetcell:null, trigger:"mouseover", scroll:1, vis:1, titonclassname:"on", autopage:false, prevcell:".prev", nextcell:".next", pagestatecell:".pagestate", opp: false, pnloop:true, easing:"swing", startfun:null, endfun:null, switchload:null, playstatecell:".playstate", mouseoverstop:true, defaultplay:true, returndefault:false }; return this.each(function() { var opts = $.extend({},$.fn.slide.defaults,options); var slider = $(this); var effect = opts.effect; var prevbtn = $(opts.prevcell, slider); var nextbtn = $(opts.nextcell, slider); var pagestate = $(opts.pagestatecell, slider); var playstate = $(opts.playstatecell, slider); var navobj = $(opts.titcell, slider);//导航子元素结合 var navobjsize = navobj.size(); var conbox = $(opts.maincell , slider);//内容元素父层对象 var conboxsize=conbox.children().size(); var sload=opts.switchload; var tarobj = $(opts.targetcell, slider); /*字符串转换*/ var index=parseint(opts.defaultindex); var delaytime=parseint(opts.delaytime); var intertime=parseint(opts.intertime); var triggertime=parseint(opts.triggertime); var scroll=parseint(opts.scroll); var vis=parseint(opts.vis); var autoplay = (opts.autoplay=="false"||opts.autoplay==false)?false:true; var opp = (opts.opp=="false"||opts.opp==false)?false:true; var autopage = (opts.autopage=="false"||opts.autopage==false)?false:true; var pnloop = (opts.pnloop=="false"||opts.pnloop==false)?false:true; var mouseoverstop = (opts.mouseoverstop=="false"||opts.mouseoverstop==false)?false:true; var defaultplay = (opts.defaultplay=="false"||opts.defaultplay==false)?false:true; var returndefault = (opts.returndefault=="false"||opts.returndefault==false)?false:true; var slideh=0; var slidew=0; var selfw=0; var selfh=0; var easing=opts.easing; var inter=null;//autoplay-setinterval var mst =null;//trigger-settimeout var rtnst=null;//returndefault-settimeout var titon = opts.titonclassname; var onindex = navobj.index( slider.find( "."+titon) ); var oldindex = index = onindex==-1?index:onindex; var defaultindex = index; var _ind = index; var clonenum = conboxsize>=vis?( conboxsize%scroll!=0?conboxsize%scroll:scroll):0; var _tar; var ismarq = effect=="leftmarquee" || effect=="topmarquee"?true:false; var dostartfun=function(){ if ( $.isfunction( opts.startfun) ){ opts.startfun( index,navobjsize,slider,$(opts.titcell, slider),conbox,tarobj,prevbtn,nextbtn ) } } var doendfun=function(){ if ( $.isfunction( opts.endfun ) ){ opts.endfun( index,navobjsize,slider,$(opts.titcell, slider),conbox,tarobj,prevbtn,nextbtn ) } } var reseton=function(){ navobj.removeclass(titon); if( defaultplay ) navobj.eq(defaultindex).addclass(titon) } //单独处理菜单效果 if( opts.type=="menu" ){ if( defaultplay ){ navobj.removeclass(titon).eq(index).addclass(titon); } navobj.hover( function(){ _tar=$(this).find( opts.targetcell ); var hoverind =navobj.index($(this)); mst = settimeout(function(){ index=hoverind; navobj.removeclass(titon).eq (index).addclass(titon); dostartfun(); switch (effect) { case "fade":_tar.stop(true,true).animate({opacity:"show"}, delaytime,easing,doendfun ); break; case "slidedown":_tar.stop(true,true).animate({height:"show"}, delaytime,easing,doendfun ); break; } } ,opts.triggertime); },function(){ cleartimeout(mst); switch (effect){ case "fade":_tar.animate( {opacity:"hide"},delaytime,easing ); break; case "slidedown":_tar.animate( {height:"hide"},delaytime,easing ); break; } } ); if (returndefault){ slider.hover(function(){cleartimeout(rtnst);},function(){ rtnst = settimeout( reseton,delaytime ); }); } return; } //处理分页 if( navobjsize==0 )navobjsize=conboxsize;//只有左右按钮 if( ismarq ) navobjsize=2; if( autopage ){ if(conboxsize>=vis){ if( effect=="leftloop" || effect=="toploop" ){ navobjsize=conboxsize%scroll!=0?(conboxsize/scroll^0)+1:conboxsize/scroll; } else{ var temps = conboxsize-vis; navobjsize=1+parseint(temps%scroll!=0?(temps/scroll+1):(temps/scroll)); if(navobjsize<=0)navobjsize=1; } } else{ navobjsize=1 } navobj.html(""); var str=""; if( opts.autopage==true || opts.autopage=="true" ){ for( var i=0; i" } } else{ for( var i=0; i=vis){ //当内容个数少于可视个数,不执行效果。 conbox.children().each(function(){ //取最大值 if( $(this).width()>selfw ){ selfw=$(this).width(); slidew=$(this).outerwidth(true); } if( $(this).height()>selfh ){ selfh=$(this).height(); slideh=$(this).outerheight(true); } }); var _chr = conbox.children(); var cloneele = function(){ for( var i=0; i').css( { "top":-(index*scroll)*slideh, "position":"relative","padding":"0","margin":"0"}).children().css( {"height":selfh} ); break; case "left": conbox.wrap('
').css( { "width":conboxsize*slidew,"left":-(index*scroll)*slidew,"position":"relative","overflow":"hidden","padding":"0","margin":"0"}).children().css( {"float":"left","width":selfw} ); break; case "leftloop": case "leftmarquee": cloneele(); conbox.wrap('
').css( { "width":(conboxsize+vis+clonenum)*slidew,"position":"relative","overflow":"hidden","padding":"0","margin":"0","left":-(clonenum+index*scroll)*slidew}).children().css( {"float":"left","width":selfw} ); break; case "toploop": case "topmarquee": cloneele(); conbox.wrap('
').css( { "height":(conboxsize+vis+clonenum)*slideh,"position":"relative","padding":"0","margin":"0","top":-(clonenum+index*scroll)*slideh}).children().css( {"height":selfh} ); break; } } //针对leftloop、toploop的滚动个数 var scrollnum=function(ind){ var _tempcs= ind*scroll; if( ind==navobjsize ){ _tempcs=conboxsize; }else if( ind==-1 && conboxsize%scroll!=0){ _tempcs=-conboxsize%scroll; } return _tempcs; } //切换加载 var doswitchload=function(objs){ var changeimg=function(t){ for ( var i= t; i<( vis+ t); i++ ){ objs.eq(i).find("img["+sload+"]").each(function(){ var _this = $(this); _this.attr("src",_this.attr(sload)).removeattr(sload); if( conbox.find(".clone")[0] ){ //如果存在.clone var chir = conbox.children(); for ( var j=0 ; j< chir.size() ; j++ ) { chir.eq(j).find("img["+sload+"]").each(function(){ if( $(this).attr(sload)==_this.attr("src") ) $(this).attr("src",$(this).attr(sload)).removeattr(sload) }) } } }) } } switch(effect) { case "fade": case "fold": case "top": case "left": case "slidedown": changeimg( index*scroll ); break; case "leftloop": case "toploop": changeimg( clonenum+scrollnum(_ind) ); break; case "leftmarquee":case "topmarquee": var curs = effect=="leftmarquee"? conbox.css("left").replace("px",""):conbox.css("top").replace("px",""); var slidet = effect=="leftmarquee"? slidew:slideh; var mnum=clonenum; if( curs%slidet!=0 ){ var curp = math.abs(curs/slidet^0); if( index==1 ){ mnum=clonenum+curp }else{ mnum=clonenum+curp-1 } } changeimg( mnum ); break; } }//doswitchload end //效果函数 var doplay=function(init){ // 当前页状态不触发效果 if( defaultplay && oldindex==index && !init && !ismarq ) return; //处理页码 if( ismarq ){ if ( index>= 1) { index=1; } else if( index<=0) { index = 0; } } else{ _ind=index; if ( index >= navobjsize) { index = 0; } else if( index < 0) { index = navobjsize-1; } } dostartfun(); //处理切换加载 if( sload!=null ){ doswitchload( conbox.children() ) } //处理targetcell if(tarobj[0]){ _tar = tarobj.eq(index); if( sload!=null ){ doswitchload( tarobj ) } if( effect=="slidedown" ){ tarobj.not(_tar).stop(true,true).slideup(delaytime); _tar.slidedown( delaytime,easing,function(){ if(!conbox[0]) doendfun() }); } else{ tarobj.not(_tar).stop(true,true).hide(); _tar.animate({opacity:"show"},delaytime,function(){ if(!conbox[0]) doendfun() }); } } if(conboxsize>=vis){ //当内容个数少于可视个数,不执行效果。 switch (effect) { case "fade":conbox.children().stop(true,true).eq(index).animate({opacity:"show"},delaytime,easing,function(){doendfun()}).siblings().hide(); break; case "fold":conbox.children().stop(true,true).eq(index).animate({opacity:"show"},delaytime,easing,function(){doendfun()}).siblings().animate({opacity:"hide"},delaytime,easing);break; case "top":conbox.stop(true,false).animate({"top":-index*scroll*slideh},delaytime,easing,function(){doendfun()});break; case "left":conbox.stop(true,false).animate({"left":-index*scroll*slidew},delaytime,easing,function(){doendfun()});break; case "leftloop": var __ind = _ind; conbox.stop(true,true).animate({"left":-(scrollnum(_ind)+clonenum)*slidew},delaytime,easing,function(){ if( __ind<=-1 ){ conbox.css("left",-(clonenum+(navobjsize-1)*scroll)*slidew); }else if( __ind>=navobjsize ){ conbox.css("left",-clonenum*slidew); } doendfun(); }); break;//leftloop end case "toploop": var __ind = _ind; conbox.stop(true,true).animate({"top":-(scrollnum(_ind)+clonenum)*slideh},delaytime,easing,function(){ if( __ind<=-1 ){ conbox.css("top",-(clonenum+(navobjsize-1)*scroll)*slideh); }else if( __ind>=navobjsize ){ conbox.css("top",-clonenum*slideh); } doendfun(); }); break;//toploop end case "leftmarquee": var templeft = conbox.css("left").replace("px",""); if(index==0 ){ conbox.animate({"left":++templeft},0,function(){ if( conbox.css("left").replace("px","")>= 0){ conbox.css("left",-conboxsize*slidew) } }); } else{ conbox.animate({"left":--templeft},0,function(){ if( conbox.css("left").replace("px","")<= -(conboxsize+clonenum)*slidew){ conbox.css("left",-clonenum*slidew) } }); }break;// leftmarquee end case "topmarquee": var temptop = conbox.css("top").replace("px",""); if(index==0 ){ conbox.animate({"top":++temptop},0,function(){ if( conbox.css("top").replace("px","")>= 0){ conbox.css("top",-conboxsize*slideh) } }); } else{ conbox.animate({"top":--temptop},0,function(){ if( conbox.css("top").replace("px","")<= -(conboxsize+clonenum)*slideh){ conbox.css("top",-clonenum*slideh) } }); }break;// topmarquee end }//switch end } navobj.removeclass(titon).eq(index).addclass(titon); oldindex=index; if( !pnloop ){ //pnloop控制前后按钮是否继续循环 nextbtn.removeclass("nextstop"); prevbtn.removeclass("prevstop"); if (index==0 ){ prevbtn.addclass("prevstop"); } if (index==navobjsize-1 ){ nextbtn.addclass("nextstop"); } } pagestate.html( ""+(index+1)+"/"+navobjsize); };// doplay end //初始化执行 if( defaultplay ){ doplay(true); } if (returndefault)//返回默认状态 { slider.hover(function(){ cleartimeout(rtnst) },function(){ rtnst = settimeout( function(){ index=defaultindex; if(defaultplay){ doplay(); } else{ if( effect=="slidedown" ){ _tar.slideup( delaytime, reseton ); } else{ _tar.animate({opacity:"hide"},delaytime,reseton ); } } oldindex=index; },300 ); }); } ///自动播放函数 var setinter = function(time){ inter=setinterval(function(){ opp?index--:index++; doplay() }, !!time?time:intertime); } var setmarinter = function(time){ inter = setinterval(doplay, !!time?time:intertime); } // 处理mouseoverstop var resetinter = function(){ if( !mouseoverstop ){clearinterval(inter); setinter() } } // 前后按钮触发 var nexttrigger = function(){ if ( pnloop || index!=navobjsize-1 ){ index++; doplay(); if(!ismarq)resetinter(); } } var prevtrigger = function(){ if ( pnloop || index!=0 ){ index--; doplay(); if(!ismarq)resetinter(); } } //处理playstate var playstatefun = function(){ clearinterval(inter); ismarq?setmarinter():setinter(); playstate.removeclass("pausestate") } var pausestatefun = function(){ clearinterval(inter);playstate.addclass("pausestate"); } //自动播放 if (autoplay) { if( ismarq ){ opp?index--:index++; setmarinter(); if(mouseoverstop) conbox.hover(pausestatefun,playstatefun); }else{ setinter(); if(mouseoverstop) slider.hover( pausestatefun,playstatefun ); } } else{ if( ismarq ){ opp?index--:index++; } playstate.addclass("pausestate"); } playstate.click(function(){ playstate.hasclass("pausestate")?playstatefun():pausestatefun() }); //titcell事件 if(opts.trigger=="mouseover"){ navobj.hover(function(){ var hoverind = navobj.index(this); mst = settimeout(function(){ index=hoverind; doplay(); resetinter(); },opts.triggertime); }, function(){ cleartimeout(mst) }); }else{ navobj.click(function(){ index=navobj.index(this); doplay(); resetinter(); }) } //前后按钮事件 if (ismarq){ nextbtn.mousedown(nexttrigger); prevbtn.mousedown(prevtrigger); //前后按钮长按10倍加速 if (pnloop) { var st; var mardown = function(){ st=settimeout(function(){ clearinterval(inter); setmarinter( intertime/10^0 ) },150) } var marup = function(){ cleartimeout(st); clearinterval(inter); setmarinter() } nextbtn.mousedown(mardown); nextbtn.mouseup(marup); prevbtn.mousedown(mardown); prevbtn.mouseup(marup); } //前后按钮mouseover事件 if( opts.trigger=="mouseover" ){ nextbtn.hover(nexttrigger,function(){}); prevbtn.hover(prevtrigger,function(){}); } }else{ nextbtn.click(nexttrigger); prevbtn.click(prevtrigger); } });//each end };//slide end })(jquery);