Oggi impariamo come creare uno Slideshow con jQuery che abbia un effetto bolle. Spesso e volentieri non sappiamo come presentare una serie di immagini e questo sara’ il modo per dare un tocco di novita’ alla vostra presentazione. Il codice e’ molto semplice, quindi se avete 5 minuti iniziamo a bomba.
CODICE HTML
Come sempre bisogna iniziare dall’ossatura, quindi creiamo un file Html che chiamiamo index.html come il seguente:
Slideshow jQuery effetto bolle| iwebdesigner Demo
Abbiamo incluso i file necessari per l’effetto. Adesso andiamo ad analizzare questi file.
FILE JAVASCRIPT E JQUERY
Innanzi tutto bisogna definire una classe JavaScript nominata Bubble. Ogni bolla nello Slideshow sara’ un’oggetto di questa classe.
jquery.bubbleSlideshow.js
// This is the Bubble class. It takes left and top // coordinates, size (diameter) and a image URL function Bubble( left, top, size, imgURL ){ this.top = top; this.left = left; this.size = size; // This places the center of the // circles on the specified position: top -= size/2; left-= size/2; this.elem = $('',{ 'class':'bubble', 'css' : { 'width' : size, 'height' : size, 'top' : top, 'left' : left, 'background-position': (-left)+'px '+(-top)+'px', 'background-image': 'url('+imgURL+')' } }); } // The fly from method takes a starting position, time, // and a callback function, executed when the animation finishes. Bubble.prototype.flyFrom = function( startX, startY, time, callBack ){ time = time || 250; callBack = callBack || function(){}; startX -= this.size/2; startY -= this.size/2; // Offsetting the element this.elem.css({ 'display' : 'block', 'backgroundPositionX' : -startX, 'backgroundPositionY' : -startY, 'left' : startX, 'top' : startY }); // Animating it to where it should be this.elem.animate({ 'backgroundPositionX' : -this.left, 'backgroundPositionY' : -this.top, 'left' : this.left, 'top' : this.top }, time, 'easeOutCirc', callBack ); }; // Helper function for generating random // values in the [min,max] range function rand( min, max ){ return Math.floor( Math.random()*((max+1)-min) + min); }Il metodo flyFrom() prende una serie di cordinate che servono a determinare la posizione di apparizione della bolla. La funzione ha una durata di 250 millisecondi, personalizzabile a vostro piacimento.
jquery.bubbleSlideshow.js
In questo file costruiamo una funzione che crea un array per ogni bolla, li attribuisce ad un elemento LI e li anima
function showBubbles( stage, imgURL, func ){ // This function appends a new LI element to the UL // and uses it to hold and animate the bubbles. var i = 0, bubbles = [], totalBubbles = 75, stageWidth = stage.outerWidth(), stageHeight = stage.outerHeight(), emptyFunc = function(){}; // This li holds the bubbles var li = $('
Adesso abbiamo una funzione che crea una serie di bolle e le anima, ma mancano le immagini e ancora un’altra serie di codice. Scriviamo i pezzi mancanti:
jquery.bubbleSlideshow.js
$.fn.bubbleSlideshow = function(photos){ if(!$.isArray(photos)){ throw new Error("You need to pass an array of photo URLs as a parameter!"); } photos = photos.reverse(); var ul = this.addClass('bubbleSlideshow'); $.each(photos,function(){ ul.append('
Con questo codice definiamo una funzione bubbleSlideshow che aggiunge su un elemento UL e prende una serie di URL delle immagini come parametro.
All’interno dello stesso file viene creato un elemento LI per ciascuna immagine inserita nello Slideshow e aggiunge una funzione showNext e showPrev (img successiva, img precedente) e i metodi AutoAdvance e stopAutoAdvance all’elemento UL. Questa e’ l’altra porzione di codice del file jquery.bubbleSlideshow.js:
function autoAdvance(stage,timeout){ stage.data('timeout',setTimeout(function(){ showNext(stage); autoAdvance(stage,timeout); },timeout)); } function stopAutoAdvance(stage){ clearTimeout(stage.data('timeout')); } function showNext(stage){ showFrame(stage, stage.find('li.bubbleImageFrame').first()); } function showPrev(stage){ showFrame(stage, stage.find('li.bubbleImageFrame').last().prev()); } function showFrame(stage, frame ){ // This function shows a frame, // passed as a jQuery object if(stage.data('working')){ // Prevents starting more than // one animation at a time: return false; } stage.data('working',true); var frame = frame.hide().detach(); // Using the showBubbles function, defined below. // The frame is showed after the bubble animation is over. showBubbles( stage, frame.find('img').attr('src'), function(){ stage.append(frame); stage.data('working',false); // This returns a jQuery Promise object. return frame.fadeIn('slow'); }); }Tutta questa funzione viene richiamata quando finisce l’animazione della bolla.
Adesso passiamo ad analizzare la presentazione della bolla nel file script.js:
$(function(){ var photos = [ 'http://farm6.static.flickr.com/5230/5822520546_dd2b6d7e24_z.jpg', 'http://farm5.static.flickr.com/4014/4341260799_b466a1dfe4_z.jpg', 'http://farm6.static.flickr.com/5138/5542165153_86e782382e_z.jpg', 'http://farm5.static.flickr.com/4040/4305139726_829be74e29_z.jpg', 'http://farm4.static.flickr.com/3071/5713923079_60f53b383f_z.jpg', 'http://farm5.static.flickr.com/4108/5047301420_621d8a7912_z.jpg' ]; var slideshow = $('#slideShow').bubbleSlideshow(photos); $(window).load(function(){ slideshow.autoAdvance(5000); }); // Other valid method calls: // slideshow.showNext(); // slideshow.showPrev(); // slideshow.stopAutoAdvance(); });Questo e’ tutto ci manca solo il file CSS per definire le proprieta’ overflow; eccolo
jquery.bubbleSlideshow.cssul.bubbleSlideshow{ position:relative; list-style:none; overflow:hidden; } .bubbleSlideshow li{ position:absolute; top:0; left:0; } .bubbleSlideshow li img{ display:block; } .bubbleSlideshow li div.bubble{ -moz-border-radius:50%; -webkit-border-raidus:50%; border-radius:50%; background-repeat:no-repeat; display:none; position:absolute; }Questo e’ tutto, abbiamo costruito uno Slideshow con effetto bolla e l’uso di jQuery. Spero che vi sia utile.
Alla prossima!