/* * jQuery Nivo Slider v2.3 * http://nivo.dev7studios.com * * Copyright 2010, Gilbert Pellegrom * Free to use and abuse under the MIT license. * http://www.opensource.org/licenses/mit-license.php * * May 2010 - Pick random effect from specified set of effects by toronegro * May 2010 - controlNavThumbsFromRel option added by nerd-sh * May 2010 - Do not start nivoRun timer if there is only 1 slide by msielski * April 2010 - controlNavThumbs option added by Jamie Thompson (http://jamiethompson.co.uk) * March 2010 - manualAdvance option added by HelloPablo (http://hellopablo.co.uk) */ (function($){ var NivoSlider=function(element,options){ var settings=$.extend({},$.fn.nivoSlider.defaults,options); var vars={currentSlide:0,currentImage:'',totalSlides:0,randAnim:'',running:false,paused:false,stop:false}; var slider=$(element); slider.data('nivo:vars',vars); slider.css('position','relative'); slider.addClass('nivoSlider'); var kids=slider.children(); kids.each(function(){ var child=$(this); var link=''; if(!child.is('img')){ if(child.is('a')){ child.addClass('nivo-imageLink'); link=child; } child=child.find('img:first'); } var childWidth=child.width(); if(childWidth==0)childWidth=child.attr('width'); var childHeight=child.height(); if(childHeight==0)childHeight=child.attr('height'); if(childWidth>slider.width()){ slider.width(childWidth); } if(childHeight>slider.height()){ slider.height(childHeight); } if(link!=''){ link.css('display','none'); } child.css('display','none'); vars.totalSlides++; } ); if(settings.startSlide>0){ if(settings.startSlide>=vars.totalSlides)settings.startSlide=vars.totalSlides-1; vars.currentSlide=settings.startSlide; } if($(kids[vars.currentSlide]).is('img')){ vars.currentImage=$(kids[vars.currentSlide]); } else{ vars.currentImage=$(kids[vars.currentSlide]).find('img:first'); } if($(kids[vars.currentSlide]).is('a')){ $(kids[vars.currentSlide]).css('display','block'); } slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat'); for(var i=0;i').css({left:(sliceWidth*i)+'px',width:(slider.width()-(sliceWidth*i))+'px'})); } else{ slider.append($('
').css({left:(sliceWidth*i)+'px',width:sliceWidth+'px'})); } } slider.append($('
').css({display:'none'})); if(vars.currentImage.attr('title')!=''){ var title=vars.currentImage.attr('title'); if(title.substr(0,1)=='#')title=$(title).html(); $('.nivo-caption',slider).html(title); $('.nivo-caption',slider).fadeIn(settings.animSpeed); } var timer=0; if(!settings.manualAdvance&&kids.length>1){ timer=setInterval(function(){nivoRun(slider,kids,settings,false);},settings.pauseTime); } if(settings.directionNav){ slider.append('
PrevNext
'); if(settings.directionNavHide){ $('.nivo-directionNav',slider).hide(); slider.hover(function(){$('.nivo-directionNav',slider).show();},function(){$('.nivo-directionNav',slider).hide();} ); } $('a.nivo-prevNav',slider).live('click',function(){ if(vars.running)return false; clearInterval(timer); timer=''; vars.currentSlide-=2; nivoRun(slider,kids,settings,'prev'); }); $('a.nivo-nextNav',slider).live('click',function(){ if(vars.running)return false; clearInterval(timer); timer=''; nivoRun(slider,kids,settings,'next'); } ); } if(settings.controlNav){ var nivoControl=$('
'); slider.append(nivoControl); for(var i=0; i'); } else{ nivoControl.append(''); } } else{ nivoControl.append(''+(i+1)+''); } } $('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active'); $('.nivo-controlNav a',slider).live('click',function(){ if(vars.running)return false; if($(this).hasClass('active'))return false; clearInterval(timer); timer=''; slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat'); vars.currentSlide=$(this).attr('rel')-1; nivoRun(slider,kids,settings,'control'); } ); } if(settings.keyboardNav){ $(window).keypress(function(event){ if(event.keyCode=='37'){ if(vars.running)return false; clearInterval(timer); timer=''; vars.currentSlide-=2; nivoRun(slider,kids,settings,'prev'); } if(event.keyCode=='39'){ if(vars.running)return false; clearInterval(timer); timer=''; nivoRun(slider,kids,settings,'next'); } } ); } if(settings.pauseOnHover){ slider.hover(function(){ vars.paused=true; clearInterval(timer); timer=''; } ,function(){ vars.paused=false; if(timer==''&&!settings.manualAdvance){ timer=setInterval(function(){ nivoRun(slider,kids,settings,false); } ,settings.pauseTime); } } ); } slider.bind('nivo:animFinished',function(){ vars.running=false; $(kids).each(function(){ if($(this).is('a')){ $(this).css('display','none'); } } ); if($(kids[vars.currentSlide]).is('a')){ $(kids[vars.currentSlide]).css('display','block'); } if(timer==''&&!vars.paused&&!settings.manualAdvance){ timer=setInterval(function(){ nivoRun(slider,kids,settings,false); } ,settings.pauseTime); } settings.afterChange.call(this); } ); var nivoRun=function(slider,kids,settings,nudge){ var vars=slider.data('nivo:vars'); if(vars&&(vars.currentSlide==vars.totalSlides-1)){ settings.lastSlide.call(this); } if((!vars||vars.stop)&&!nudge)return false; settings.beforeChange.call(this); if(!nudge){ slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat'); } else{ if(nudge=='prev'){ slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat'); } if(nudge=='next'){ slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat'); } } vars.currentSlide++; if(vars.currentSlide==vars.totalSlides){ vars.currentSlide=0; settings.slideshowEnd.call(this); } if(vars.currentSlide<0)vars.currentSlide=(vars.totalSlides-1); if($(kids[vars.currentSlide]).is('img')){ vars.currentImage=$(kids[vars.currentSlide]); } else{ vars.currentImage=$(kids[vars.currentSlide]).find('img:first'); } if(settings.controlNav){ $('.nivo-controlNav a',slider).removeClass('active'); $('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active'); } if(vars.currentImage.attr('title')!=''){ var title=vars.currentImage.attr('title'); if(title.substr(0,1)=='#')title=$(title).html(); if($('.nivo-caption',slider).css('display')=='block'){ $('.nivo-caption',slider).animate({ right:'-400'} ,600,'easeInBack').fadeOut(settings.animSpeed,function(){ $(this).html(title); $(this).animate({ right:'41'} ,400,'easeOutBack').fadeIn(settings.animSpeed); } ); } else{ $('.nivo-caption',slider).html(title); } $('.nivo-caption',slider).fadeIn(settings.animSpeed); } else{ $('.nivo-caption',slider).fadeOut(settings.animSpeed); } var i=0; $('.nivo-slice',slider).each(function(){ var sliceWidth=Math.round(slider.width()/settings.slices); $(this).css({ height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'} ); i++; } ); if(settings.effect=='random'){ var anims=new Array("sliceDownRight","sliceDownLeft","sliceUpRight","sliceUpLeft","sliceUpDown","sliceUpDownLeft","fold","fade"); vars.randAnim=anims[Math.floor(Math.random()*(anims.length+1))]; if(vars.randAnim==undefined)vars.randAnim='fade'; } if(settings.effect.indexOf(',')!=-1){ var anims=settings.effect.split(','); vars.randAnim=$.trim(anims[Math.floor(Math.random()*anims.length)]); } vars.running=true; if(settings.effect=='sliceDown'||settings.effect=='sliceDownRight'||vars.randAnim=='sliceDownRight'||settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft'){ var timeBuff=0; var i=0; var slices=$('.nivo-slice',slider); if(settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft')slices=$('.nivo-slice',slider)._reverse(); slices.each(function(){ var slice=$(this); slice.css('top','0px'); if(i==settings.slices-1){ setTimeout(function(){ slice.animate({ height:'100%',opacity:'1.0'} ,settings.animSpeed,'',function(){ slider.trigger('nivo:animFinished'); } ); } ,(100+timeBuff)); } else{ setTimeout(function(){ slice.animate({ height:'100%',opacity:'1.0'} ,settings.animSpeed); } ,(100+timeBuff)); } timeBuff+=50; i++; } ); } else if(settings.effect=='sliceUp'||settings.effect=='sliceUpRight'||vars.randAnim=='sliceUpRight'||settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft'){ var timeBuff=0; var i=0; var slices=$('.nivo-slice',slider); if(settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft')slices=$('.nivo-slice',slider)._reverse(); slices.each(function(){ var slice=$(this); slice.css('bottom','0px'); if(i==settings.slices-1){ setTimeout(function(){ slice.animate({ height:'100%',opacity:'1.0'} ,settings.animSpeed,'',function(){ slider.trigger('nivo:animFinished'); } ); } ,(100+timeBuff)); } else{ setTimeout(function(){ slice.animate({ height:'100%',opacity:'1.0'} ,settings.animSpeed); } ,(100+timeBuff)); } timeBuff+=50; i++; } ); } else if(settings.effect=='sliceUpDown'||settings.effect=='sliceUpDownRight'||vars.randAnim=='sliceUpDown'||settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft'){ var timeBuff=0; var i=0; var v=0; var slices=$('.nivo-slice',slider); if(settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft')slices=$('.nivo-slice',slider)._reverse(); slices.each(function(){ var slice=$(this); if(i==0){ slice.css('top','0px'); i++; } else{ slice.css('bottom','0px'); i=0; } if(v==settings.slices-1){ setTimeout(function(){ slice.animate({ height:'100%',opacity:'1.0'} ,settings.animSpeed,'',function(){ slider.trigger('nivo:animFinished'); } ); } ,(100+timeBuff)); } else{ setTimeout(function(){ slice.animate({ height:'100%',opacity:'1.0'} ,settings.animSpeed); } ,(100+timeBuff)); } timeBuff+=50; v++; } ); } else if(settings.effect=='fold'||vars.randAnim=='fold'){ var timeBuff=0; var i=0; $('.nivo-slice',slider).each(function(){ var slice=$(this); var origWidth=slice.width(); slice.css({ top:'0px',height:'100%',width:'0px'} ); if(i==settings.slices-1){ setTimeout(function(){ slice.animate({ width:origWidth,opacity:'1.0'} ,settings.animSpeed,'',function(){ slider.trigger('nivo:animFinished'); } ); } ,(100+timeBuff)); } else{ setTimeout(function(){ slice.animate({ width:origWidth,opacity:'1.0'} ,settings.animSpeed); } ,(100+timeBuff)); } timeBuff+=50; i++; } ); } else if(settings.effect=='fade'||vars.randAnim=='fade'){ var i=0; $('.nivo-slice',slider).each(function(){ $(this).css('height','100%'); if(i==settings.slices-1){ $(this).animate({ opacity:'1.0'} ,(settings.animSpeed*2),'',function(){ slider.trigger('nivo:animFinished'); } ); } else{ $(this).animate({ opacity:'1.0'} ,(settings.animSpeed*2)); } i++; } ); } } var trace=function(msg){ if(this.console&&typeof console.log!="undefined") console.log(msg); } this.stop=function(){ if(!$(element).data('nivo:vars').stop){ $(element).data('nivo:vars').stop=true; trace('Stop Slider'); } } this.start=function(){ if($(element).data('nivo:vars').stop){ $(element).data('nivo:vars').stop=false; trace('Start Slider'); } } settings.afterLoad.call(this); } ; $.fn.nivoSlider=function(options){ return this.each(function(){ var element=$(this); if(element.data('nivoslider'))return; var nivoslider=new NivoSlider(this,options); element.data('nivoslider',nivoslider); } ); } ; $.fn.nivoSlider.defaults={ effect:'random',slices:15,animSpeed:500,pauseTime:3000,startSlide:0,directionNav:true,directionNavHide:true,controlNav:true,controlNavThumbs:false,controlNavThumbsFromRel:false,controlNavThumbsSearch:'.jpg',controlNavThumbsReplace:'_thumb.jpg',keyboardNav:true,pauseOnHover:true,manualAdvance:false,captionOpacity:1,beforeChange:function(){ } ,afterChange:function(){ } ,slideshowEnd:function(){ } ,lastSlide:function(){ } ,afterLoad:function(){ } } ; $.fn._reverse=[].reverse; } )(jQuery);