// Pixwall slideshow v1.0.0 - a jQuery slideshow with many effects, transitions, easy to customize, using canvas and mobile ready, based on jQuery 1.4+ // Copyright (c) 2011 by Manuel Masia - www.pixedelic.com // Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php ;(function($){$.fn.pixwall_delight = function(opts, callback) { var defaults = { target : '#pixwall_delight_target', //if you don't want fullscreen iamges, but if you prefer that your images resize according with a div, type here its name: '.my_divs' or '#my_div' fx : 'random', //'random','simpleFade','scrollLeft','scrollRight','scrollTop','scrollBottom','scrollHorz' //you can also use more than one effect: 'simpleFade, scrollRight, scrollBottom' mobileFx : '', //leave empty if you want to display the same effect on mobile devices and on desktop etc. slideOn : 'random', //next, prev, random: decide if the transition effect will be applied to the current (prev) or the next slide gridDifference : 250, //to make the grid blocks slower than the slices, this value must be smaller than transPeriod easing : 'easeInOutExpo', //for the complete list http://jqueryui.com/demos/effect/easing.html mobileEasing : '', //leave empty if you want to display the same easing on mobile devices and on desktop etc. loader : 'bar', //pie, bar, none (even if you choose "pie", old browsers like IE8- can't display it... they will display always a loading bar) loaderOpacity : .8, //0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1 loaderColor : '#ffff00', loaderBgColor : '#222222', pieDiameter : 50, pieContainer : '#pixwall_delight_pie', pieStroke : 8, barContainer : '#pixwall_delight_bar', barDirection : 'bottomToTop', //'leftToRight', 'rightToLeft', 'topToBottom', 'bottomToTop' prevNav : '#pixwall_delight_prev', //true, false. It enables the previous and the next buttons, their IDs are #pixwall_delight_prev and #pixwall_delight_next nextNav : '#pixwall_delight_next', //true, false. It enables the previous and the next buttons, their IDs are #pixwall_delight_prev and #pixwall_delight_next commands : '#pixwall_delight_commands', //true, false. It enables stop and play buttons mobileCommands : true, //true, false. It enables stop and play buttons on mobile devices pagination : '#pixwall_delight_pag', //It enables the pagination numbers. This is the appended code: //
// //
mobilePagination : '#pixwall_delight_pag', //It enables the pagination numbers on mobile devices thumbs : '#pixwall_delight_thumbs', //It shows the thumbnails (if available) when the mouse is on the pagination buttons. Not available for mobile devices hover : true, //true, false. Puase on state hover. Not available for mobile devices pauseOnClick : true, //true, false. It stops the slideshow when you click the sliders. rows : 4, cols : 6, slicedRows : 8, //if 0 the same value of rows slicedCols : 12, //if 0 the same value of cols opacityOnGrid : false, //true, false. Decide to apply a fade effect to blocks and slices: if your slideshow is fullscreen or simply big, I recommend to set it false to have a smoother effect time : 7000, //milliseconds between the end of the sliding effect and the start of the nex one transPeriod : 1500, //lenght of the sliding effect in milliseconds autoAdvance : true, //true, false mobileAutoAdvance : true, //true, false. Auto-advancing for mobile devices portrait : false, //true, false. Select true if you don't want that your images are cropped alignment : 'center', //topLeft, topCenter, topRight, centerLeft, center, centerRight, bottomLeft, bottomCenter, bottomRight onStartLoading : function() { }, afterChange : function() { }, beforeChange : function() { }, onLoaded : function() { } }; function isMobile() { //sniff a mobile browser if( navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i) ){ return true; } } var opts = $.extend({}, defaults, opts); var elem = $(this); var target = $(opts.target); //the target element var w = target.width(); var h = target.height(); var allImg = new Array(); //I create an array for the images of the slideshow $('> div', elem).each( function() { allImg.push($(this).attr('data-src')); //all the images are pushed in the array }); var amountSlide = allImg.length; //how many sliders var allThumbs = new Array(); $('> div', elem).each( function() { allThumbs.push($(this).attr('data-thumb')); }); target.append('
'); //I append the container for the slides var pixwall_delightCont = $('#pixwallDelightCont'); var loop; for (loop=0;loop'); //I create as many slides as the a tags in elem var div = $('> div:eq('+loop+')',elem); $('#pixwall_delightSlide_'+loop).clone(div); } if($(opts.thumbs).length) { $(opts.thumbs).before('
').after('
'); $('#pixwall_delight_prevThumbs, #pixwall_delight_nextThumbs').animate({opacity:.7},0); $(opts.thumbs).append('
'); $('>div',opts.thumbs).append('
    '); jQuery.each(allThumbs, function(i, val) { var newImg = new Image(); newImg.src = val; $('ul',opts.thumbs).append('
  • '); $('li#pix_thumb_'+i).append($(newImg).attr('class','pix_thumb')); }); } function thumbnailVisible() { } $(window).bind('load resize',function(){ thumbnailVisible(); }); function thumbnailPos() { } pixwall_delightCont.append('
    '); //hack to get the size of the last prepended image, do not remove var started; $(window).bind('resize',function(){ if(started == true) { resizeImage(); } $('ul', opts.thumbs).animate({'margin-top':0},0,thumbnailPos); }); function resizeImage(){ //The name explains the function w = target.width(); h = target.height(); $('.pixwall_delightrelative',elem).css({'width':w,'height':h}); $('.imgLoaded', target).each(function(){ var t = $(this), wT = t.attr('width'), hT = t.attr('height'), mTop, mLeft, alignment = t.attr('data-alignment'); if(typeof alignment === 'undefined' || alignment === false){ alignment = opts.alignment; } if(opts.portrait==false){ if((wT/hT)<(w/h)) { var r = w / wT; var d = (Math.abs(h - (hT*r)))*0.5; switch(alignment){ case 'topLeft': mTop = 0; break; case 'topCenter': mTop = 0; break; case 'topRight': mTop = 0; break; case 'centerLeft': mTop = '-'+d+'px'; break; case 'center': mTop = '-'+d+'px'; break; case 'centerRight': mTop = '-'+d+'px'; break; case 'bottomLeft': mTop = '-'+d*2+'px'; break; case 'bottomCenter': mTop = '-'+d*2+'px'; break; case 'bottomRight': mTop = '-'+d*2+'px'; break; } t.css({ 'height' : hT*r, 'margin-left' : 0, 'margin-top' : mTop, 'position' : 'absolute', 'width' : w }); } else { var r = h / hT; var d = (Math.abs(w - (wT*r)))*0.5; switch(alignment){ case 'topLeft': mLeft = 0; break; case 'topCenter': mLeft = '-'+d+'px'; break; case 'topRight': mLeft = '-'+d*2+'px'; break; case 'centerLeft': mLeft = 0; break; case 'center': mLeft = '-'+d+'px'; break; case 'centerRight': mLeft = '-'+d*2+'px'; break; case 'bottomLeft': mLeft = 0; break; case 'bottomCenter': mLeft = '-'+d+'px'; break; case 'bottomRight': mLeft = '-'+d*2+'px'; break; } t.css({ 'height' : h, 'margin-left' : mLeft, 'margin-top' : 0, 'position' : 'absolute', 'width' : wT*r }); } } else { if((wT/hT)<(w/h)) { var r = h / hT; var d = (Math.abs(w - (wT*r)))*0.5; t.css({ 'height' : h, 'margin-left' : d+'px', 'margin-top' : 0, 'position' : 'absolute', 'width' : wT*r }); } else { var r = w / wT; var d = (Math.abs(h - (hT*r)))*0.5; t.css({ 'height' : hT*r, 'margin-left' : 0, 'margin-top' : d+'px', 'position' : 'absolute', 'width' : w }); } } }); started = true; } var u; //Define some difference if is a mobile device or not var clickEv, autoAdv, navHover, commands, pagination; clickEv = 'click'; autoAdv = opts.autoAdvance; if(autoAdv==false){ elem.addClass('stopped'); $('#pixwall_delight_stop').fadeOut(0); } else { $('#pixwall_delight_play').fadeOut(0); } navHover = opts.navigationHover; commands = opts.commands; pagination = opts.pagination; if(elem.length!=0){ var selector = $('.pixwall_delightSlide'); selector.wrapInner('
    '); //wrap a div for the position of absolute elements var nav; //nextSlide(nav) function imgFake() { //this function replace elements such as iframes or objects with an image stored in data-fake attribute $('*[data-fake]',elem).each(function(){ var t = $(this); var imgFakeUrl = t.attr('data-fake'); var imgFake = new Image(); imgFake.src = imgFakeUrl; t.after($(imgFake).attr('class','imgFake')); //the image has class imgFake var clone = t.clone(); t.remove(); //I remove the element after cloning so it is initialized only when it appears $('.elemToHide').show(); $(imgFake).click(function(){ $(this).hide().after(clone); $('.elemToHide').hide(); }); }); } imgFake(); if(opts.hover==true){ //if the option "hover" is true I stop the slideshow on mouse over and I resume it on mouse out if(!isMobile()){ elem.hoverIntent({ over: function(){ elem.addClass('stopped'); }, out: function(){ if(autoAdv!=false){ elem.removeClass('stopped'); } }, timeout: 0 }); } } if(navHover==true){ //if the option is true I show the next and prev button only on mouse over elem.hover(function(){ $('#pixwall_delight_prev, #pixwall_delight_next').stop(true,false).animate({opacity:1},200); },function(){ $('#pixwall_delight_prev, #pixwall_delight_next').stop(true,false).animate({opacity:0},200); }); } $.fn.pixwall_delightStop = function() { autoAdv = false; elem.addClass('stopped'); if($('#pixwall_delight_stop').length){ $('#pixwall_delight_stop').fadeOut(100,function(){ $('#pixwall_delight_play').fadeIn(100); if(opts.loader!='none'){ $('#pixwall_delight_canvas').fadeOut(100); } }); } else { if(opts.loader!='none'){ $('#pixwall_delight_canvas').fadeOut(100); } } } $('#pixwall_delight_stop').live('click',function(){ //stop function elem.pixwall_delightStop(); }); $.fn.pixwall_delightPlay = function() { autoAdv = true; elem.removeClass('stopped'); if($('#pixwall_delight_play').length){ $('#pixwall_delight_play').fadeOut(100,function(){ $('#pixwall_delight_stop').fadeIn(100); if(opts.loader!='none'){ $('#pixwall_delight_canvas').fadeIn(100); } }); } else { if(opts.loader!='none'){ $('#pixwall_delight_canvas').fadeIn(100); } } } $('#pixwall_delight_play').live('click',function(){ //play function elem.pixwall_delightPlay(); }); if(opts.pauseOnClick==true){ //if option is true I stop the slideshow if the user clicks on the slider selector.click(function(){ autoAdv = false; elem.addClass('stopped'); $('#pixwall_delight_stop').fadeOut(100,function(){ $('#pixwall_delight_play').fadeIn(100); $('#pixwall_delight_canvas').fadeOut(100); }); }); } } function shuffle(arr) { //to randomize the effect for( var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x ); return arr; } function isInteger(s) { //to check if a number is integer return Math.ceil(s) == Math.floor(s); } if (($.browser.msie && $.browser.version < 9) || opts.loader == 'bar') { //IE8- has some problems with canvas, I prefer to use a simple loading bar in CSS $('#pixwall_delight_bar').append(''); $('#pixwall_delight_bar_cont') .animate({opacity:opts.loaderOpacity},0) .css({'position':'absolute', 'left':0, 'right':0, 'top':0, 'bottom':0, 'background-color':opts.loaderBgColor}) .append(''); $('#pixwall_delight_canvas').animate({opacity:0},0); var canvas = $("#pixwall_delight_canvas"); canvas.css({'position':'absolute', 'left':0, 'right':0, 'top':0, 'bottom':0, 'background-color':opts.loaderColor}); } else { $('#pixwall_delight_pie').append(''); var G_vmlCanvasManager; var canvas = document.getElementById("pixwall_delight_canvas"); canvas.setAttribute("width", opts.pieDiameter); canvas.setAttribute("height", opts.pieDiameter); canvas.setAttribute("style", "position:absolute; z-index:1002; "+opts.piePosition); var rad; var radNew; if (canvas && canvas.getContext) { var ctx = canvas.getContext("2d"); ctx.rotate(Math.PI*(3/2)); ctx.translate(-opts.pieDiameter,0); } } if(opts.loader=='none' || autoAdv==false) { //hide the loader if you want $('#pixwall_delight_canvas, #pixwall_delight_canvas_wrap').hide(); } if($(pagination).length) { $(pagination).append('
      '); var li; for (li = 0; li < amountSlide; li++){ $('#pixwall_delight_pag_ul').append('
    • '+li+'
    • '); } } if($(commands).length) { $(commands).append('
      ').append('
      '); if(autoAdv==true){ $('#pixwall_delight_play').hide(); $('#pixwall_delight_stop').show(); } else { $('#pixwall_delight_stop').hide(); $('#pixwall_delight_play').show(); } } if(navHover==true){ $('#pixwall_delight_prev, #pixwall_delight_next').animate({opacity:0},0); } function canvasLoader() { rad = 0; if (($.browser.msie && $.browser.version < 9) || opts.loader == 'bar') { switch(opts.barDirection){ case 'leftToRight': $('#pixwall_delight_canvas').css({'right':'auto'}); break; case 'rightToLeft': $('#pixwall_delight_canvas').css({'left':'auto'}); break; case 'topToBottom': $('#pixwall_delight_canvas').css({'bottom':'auto'}); break; case 'bottomToTop': $('#pixwall_delight_canvas').css({'top':'auto'}); break; } } else { ctx.clearRect(0,0,opts.pieDiameter,opts.pieDiameter); // clear canvas } } canvasLoader(); $('.fromLeft, .fromRight, .fromTop, .fromBottom, .fadeIn').each(function(){ $(this).css('visibility','hidden'); }); opts.onStartLoading.call(this); nextSlide(); /*************************** FUNCTION nextSlide() ***************************/ function nextSlide(nav){ //funzione per il fading delle immagini elem.addClass('pixwall_delightsliding'); //aggiunge una classe che mi dice che il fading in corso var vis = parseFloat($('div.pixwall_delightcurrent').index()); //la variabile il numero del div partendo da 0 if(nav>0){ var slideI = nav-1; } else if (vis == amountSlide-1) { var slideI = 0; } else { var slideI = vis+1; } var slide = $('.pixwall_delightSlide:eq('+slideI+')',target); $('.pixwall_delightContent').fadeOut(600); if(!$('.imgLoaded',slide).length){ var imgUrl = allImg[slideI]; var imgLoaded = new Image(); imgLoaded.src = imgUrl/* +"?"+ new Date().getTime();*/; slide.css('visibility','hidden'); slide.prepend($(imgLoaded).attr('class','imgLoaded')); var wT, hT; if (!$(imgLoaded).get(0).complete || wT == '0' || hT == '0' || typeof wT === 'undefined' || wT === false || typeof hT === 'undefined' || hT === false) { opts.onLoaded.call(this); $('#pixwall_delight_loader').delay(500).fadeIn(400); imgLoaded.onload = function() { wT = imgLoaded.naturalWidth; hT = imgLoaded.naturalHeight; $(imgLoaded).attr('width',wT); $(imgLoaded).attr('height',hT); $('#pixwall_delightSlide_'+slideI).hide().css('visibility','visible'); resizeImage(); nextSlide(slideI+1); }; } else { wT = imgLoaded.naturalWidth; hT = imgLoaded.naturalHeight; $(imgLoaded).attr('width',wT); $(imgLoaded).attr('height',hT); $('#pixwall_delightSlide_'+slideI).hide().css('visibility','visible'); resizeImage(); imgLoaded.onload = function() { nextSlide(slideI+1); } } } else { if($('#pixwall_delight_loader').is(':visible')){ $('#pixwall_delight_loader').fadeOut(400); } else { $('#pixwall_delight_loader').css({'visibility':'hidden'}); $('#pixwall_delight_loader').fadeOut(400,function(){ $('#pixwall_delight_loader').css({'visibility':'visible'}); }); } var rows = opts.rows, cols = opts.cols, couples = 1, difference = 0, dataSlideOn, time, fx, easing, randomFx = new Array('simpleFade','curtainTopLeft','curtainTopRight','curtainBottomLeft','curtainBottomRight','curtainSliceLeft','curtainSliceRight','blindCurtainTopLeft','blindCurtainTopRight','blindCurtainBottomLeft','blindCurtainBottomRight','blindCurtainSliceBottom','blindCurtainSliceTop','stampede','mosaic','mosaicReverse','mosaicRandom','mosaicSpiral','mosaicSpiralReverse','topLeftBottomRight','bottomRightTopLeft','bottomLeftTopRight','bottomLeftTopRight','scrollLeft','scrollRight','scrollTop','scrollBottom','scrollHorz'); marginLeft = 0, marginTop = 0, opacityOnGrid = 0; if(opts.opacityOnGrid==true){ opacityOnGrid = 0; } else { opacityOnGrid = 1; } if(isMobile()){ var dataFx = selector.eq(slideI).attr('data-fx'); } else { var dataFx = selector.eq(slideI).attr('data-mobslideIleFx'); } if(typeof dataFx !== 'undefined' && dataFx!== false){ fx = dataFx; } else { if(isMobile()&&opts.mobileFx!=''){ fx = opts.mobileFx; } else { fx = opts.fx; } if(fx=='random') { fx = shuffle(randomFx); fx = fx[0]; } else { fx = fx; if(fx.indexOf(',')>0){ fx = fx.replace(/ /g,''); fx = fx.split(','); fx = shuffle(fx); fx = fx[0]; } } } if(isMobile()&&opts.mobileEasing!=''){ easing = opts.mobileEasing; } else { easing = opts.easing; } dataSlideOn = selector.eq(slideI).attr('data-slideOn'); if(typeof dataSlideOn !== 'undefined' && dataSlideOn!== false){ slideOn = dataSlideOn; } else { if(opts.slideOn=='random'){ var slideOn = new Array('next','prev'); slideOn = shuffle(slideOn); slideOn = slideOn[0]; } else { slideOn = opts.slideOn; } } time = selector.eq(slideI).attr('data-time'); if(typeof time !== 'undefined' && time!== false){ time = time; } else { time = opts.time; } if(!$(elem).hasClass('pixwall_delightstarted')){ fx = 'simpleFade'; slideOn = 'next'; $(elem).addClass('pixwall_delightstarted') } switch(fx){ case 'simpleFade': cols = 1; rows = 1; break; case 'curtainTopLeft': if(opts.slicedCols == 0) { cols = opts.cols; } else { cols = opts.slicedCols; } rows = 1; break; case 'curtainTopRight': if(opts.slicedCols == 0) { cols = opts.cols; } else { cols = opts.slicedCols; } rows = 1; break; case 'curtainBottomLeft': if(opts.slicedCols == 0) { cols = opts.cols; } else { cols = opts.slicedCols; } rows = 1; break; case 'curtainBottomRight': if(opts.slicedCols == 0) { cols = opts.cols; } else { cols = opts.slicedCols; } rows = 1; break; case 'curtainSliceLeft': if(opts.slicedCols == 0) { cols = opts.cols; } else { cols = opts.slicedCols; } rows = 1; break; case 'curtainSliceRight': if(opts.slicedCols == 0) { cols = opts.cols; } else { cols = opts.slicedCols; } rows = 1; break; case 'blindCurtainTopLeft': if(opts.slicedRows == 0) { rows = opts.rows; } else { rows = opts.slicedRows; } cols = 1; break; case 'blindCurtainTopRight': if(opts.slicedRows == 0) { rows = opts.rows; } else { rows = opts.slicedRows; } cols = 1; break; case 'blindCurtainBottomLeft': if(opts.slicedRows == 0) { rows = opts.rows; } else { rows = opts.slicedRows; } cols = 1; break; case 'blindCurtainBottomRight': if(opts.slicedRows == 0) { rows = opts.rows; } else { rows = opts.slicedRows; } cols = 1; break; case 'blindCurtainSliceTop': if(opts.slicedRows == 0) { rows = opts.rows; } else { rows = opts.slicedRows; } cols = 1; break; case 'blindCurtainSliceBottom': if(opts.slicedRows == 0) { rows = opts.rows; } else { rows = opts.slicedRows; } cols = 1; break; case 'stampede': difference = '-'+opts.transPeriod; break; case 'mosaic': difference = opts.gridDifference; break; case 'mosaicReverse': difference = opts.gridDifference; break; case 'mosaicRandom': break; case 'mosaicSpiral': difference = opts.gridDifference; couples = 1.7; break; case 'mosaicSpiralReverse': difference = opts.gridDifference; couples = 1.7; break; case 'topLeftBottomRight': difference = opts.gridDifference; couples = 6; break; case 'bottomRightTopLeft': difference = opts.gridDifference; couples = 6; break; case 'bottomLeftTopRight': difference = opts.gridDifference; couples = 6; break; case 'topRightBottomLeft': difference = opts.gridDifference; couples = 6; break; case 'scrollLeft': cols = 1; rows = 1; break; case 'scrollRight': cols = 1; rows = 1; break; case 'scrollTop': cols = 1; rows = 1; break; case 'scrollBottom': cols = 1; rows = 1; break; case 'scrollHorz': cols = 1; rows = 1; break; } var cycle = 0; var blocks = rows*cols; //number of squares var leftScrap = w-(Math.floor(w/cols)*cols); //difference between rounded widths and total width var topScrap = h-(Math.floor(h/rows)*rows); //difference between rounded heights and total height var addLeft; //1 optional pixel to the widths var addTop; //1 optional pixel to the heights var tAppW = 0; //I need it to calculate the margin left for the widths var tAppH = 0; //I need it to calculate the margin right for the widths var arr = new Array(); var delay = new Array(); var order = new Array(); while(cycle < blocks){ arr.push(cycle); delay.push(cycle); pixwall_delightCont.append('