/*! * superslide v2.1 * 轻松解决网站大部分特效展示问题 * 详尽信息请看官网:http://www.superslide2.com/ * * copyright 2011-2013, 大话主席 * * 请尊重原创,保留头部版权 * 在保留版权的前提下可应用于个人或商业用途 */ (function($){ $.fn.slide=function(options){ $.fn.slide.defaults={ type:"slide", effect:"fade", autoplay:false, delaytime:500, intertime:4000, triggertime:150, defaultindex:0, titcell:".hd 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 = defaultindex = onindex==-1?index:onindex; 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); jquery.easing['jswing'] = jquery.easing['swing']; jquery.extend( jquery.easing, { def: 'easeoutquad', swing: function (x, t, b, c, d) { return jquery.easing[jquery.easing.def](x, t, b, c, d); }, easeinquad: function (x, t, b, c, d) {return c*(t/=d)*t + b;}, easeoutquad: function (x, t, b, c, d) {return -c *(t/=d)*(t-2) + b}, easeinoutquad: function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t + b;return -c/2 * ((--t)*(t-2) - 1) + b}, easeincubic: function (x, t, b, c, d) {return c*(t/=d)*t*t + b}, easeoutcubic: function (x, t, b, c, d) {return c*((t=t/d-1)*t*t + 1) + b}, easeinoutcubic: function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t + b;return c/2*((t-=2)*t*t + 2) + b}, easeinquart: function (x, t, b, c, d) {return c*(t/=d)*t*t*t + b}, easeoutquart: function (x, t, b, c, d) {return -c * ((t=t/d-1)*t*t*t - 1) + b}, easeinoutquart: function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t*t + b;return -c/2 * ((t-=2)*t*t*t - 2) + b}, easeinquint: function (x, t, b, c, d) {return c*(t/=d)*t*t*t*t + b}, easeoutquint: function (x, t, b, c, d) {return c*((t=t/d-1)*t*t*t*t + 1) + b}, easeinoutquint: function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;return c/2*((t-=2)*t*t*t*t + 2) + b}, easeinsine: function (x, t, b, c, d) {return -c * math.cos(t/d * (math.pi/2)) + c + b}, easeoutsine: function (x, t, b, c, d) {return c * math.sin(t/d * (math.pi/2)) + b}, easeinoutsine: function (x, t, b, c, d) {return -c/2 * (math.cos(math.pi*t/d) - 1) + b}, easeinexpo: function (x, t, b, c, d) {return (t==0) ? b : c * math.pow(2, 10 * (t/d - 1)) + b}, easeoutexpo: function (x, t, b, c, d) {return (t==d) ? b+c : c * (-math.pow(2, -10 * t/d) + 1) + b}, easeinoutexpo: function (x, t, b, c, d) {if (t==0) return b;if (t==d) return b+c;if ((t/=d/2) < 1) return c/2 * math.pow(2, 10 * (t - 1)) + b;return c/2 * (-math.pow(2, -10 * --t) + 2) + b}, easeincirc: function (x, t, b, c, d) {return -c * (math.sqrt(1 - (t/=d)*t) - 1) + b}, easeoutcirc: function (x, t, b, c, d) {return c * math.sqrt(1 - (t=t/d-1)*t) + b}, easeinoutcirc: function (x, t, b, c, d) {if ((t/=d/2) < 1) return -c/2 * (math.sqrt(1 - t*t) - 1) + b;return c/2 * (math.sqrt(1 - (t-=2)*t) + 1) + b}, easeinelastic: function (x, t, b, c, d) {var s=1.70158;var p=0;var a=c;if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;if (a < math.abs(c)) { a=c; var s=p/4; } else var s = p/(2*math.pi) * math.asin (c/a);return -(a*math.pow(2,10*(t-=1)) * math.sin( (t*d-s)*(2*math.pi)/p )) + b}, easeoutelastic: function (x, t, b, c, d) {var s=1.70158;var p=0;var a=c;if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;if (a < math.abs(c)) { a=c; var s=p/4; } else var s = p/(2*math.pi) * math.asin (c/a);return a*math.pow(2,-10*t) * math.sin( (t*d-s)*(2*math.pi)/p ) + c + b}, easeinoutelastic: function (x, t, b, c, d) {var s=1.70158;var p=0;var a=c;if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);if (a < math.abs(c)) { a=c; var s=p/4; } else var s = p/(2*math.pi) * math.asin (c/a);if (t < 1) return -.5*(a*math.pow(2,10*(t-=1)) * math.sin( (t*d-s)*(2*math.pi)/p )) + b;return a*math.pow(2,-10*(t-=1)) * math.sin( (t*d-s)*(2*math.pi)/p )*.5 + c + b}, easeinback: function (x, t, b, c, d, s) {if (s == undefined) s = 1.70158;return c*(t/=d)*t*((s+1)*t - s) + b}, easeoutback: function (x, t, b, c, d, s) {if (s == undefined) s = 1.70158;return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b}, easeinoutback: function (x, t, b, c, d, s) {if (s == undefined) s = 1.70158; if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b}, easeinbounce: function (x, t, b, c, d) {return c - jquery.easing.easeoutbounce (x, d-t, 0, c, d) + b}, easeoutbounce: function (x, t, b, c, d) {if ((t/=d) < (1/2.75)) { return c*(7.5625*t*t) + b;} else if (t < (2/2.75)) { return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;} else if (t < (2.5/2.75)) { return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;} else { return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;}}, easeinoutbounce: function (x, t, b, c, d) {if (t < d/2) return jquery.easing.easeinbounce (x, t*2, 0, c, d) * .5 + b;return jquery.easing.easeoutbounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;} });