Vi presento oggi una galleria di immagini con transizione a scomparsa casuale relizzata totalmente in jQuery e CSS.
RISULTATO FINALE
Ketek - Galleria di immagini casuali in jQuery
Ecco come è stato realizzato:
HTML
<li class="image" id="item1"><img src="image1.png" class="img"/><div class="panel"><label>IMAGE 1</label></div></li><li class="image" id="item2"><img src="image2.png" class="img"/><div class="panel"><label>IMAGE 2</label></div></li><li class="image" id="item3"><img src="image3.png" class="img"/><div class="panel"><label>IMAGE 3</label></div></li><li class="image" id="item4"><img src="image4.png " class="img"/><div class="panel"><label>IMAGE 4</label></div></li>
CSS
#gallery
{
width:780px;
height:740px;
background-color:#1c1c1c;margin-left:auto;
margin-right:auto;
margin-top:50px;
margin-bottom:15px;
padding:10px;
padding-top:0;
text-align:start;
overflow:hidden;
}
#gallery ul
{
list-style:none;
margin-left:-15px;
}
#gallery ul li
{
display:inline-block;
width:200px;
height:200px;
margin:20px;
background-color:#C30;}
.panel
{
position:relative;
width:186px;
height:26px;
background-color:#C30;margin-top:-40px;
text-align:stars;
padding:7px;
opacity:0;
}
.panel label
{
width:auto;
height:40px;
font-size:18px;
}
CODICE jQUERY
Vediamo ora come realizzare la transizione con jQuery:
Creo un array in cui inserirsco i numeri da 1 a 9 in modo casuale sfruttando le funzioni appositamente create array_random, n_random() e checkInArray(). Poi collego i bottoni Next e Prev alla funzione trans().
Analizziamo ora i passaggi di questa funzione:
- Controllo se devo traslare verso le immagini precedenti o successive e setto la variabile simb
- Scorro i valori dell´array e, dopo averli collegati alla rispettiva immagine, li rendo trasparenti
- Rendo trasparenti tutte le immagini in modo da non far vedere la traslazione al visitatore
- Traslo l´intera lista di immagini verso l´alto o verso il basso in modo da ritrovarmi con il blocco di immagini successivo o precedente
- Ciclo i nuovi elementi usando sempre l´array di numeri casuali e li rendo opachi ad uno ad uno.
Come potete capire dall´immagine il rendere trasparente le immagini del secondo blocco mi è utile per nascondere al visitatore la transizione verso l´alto(in questo caso) o verso il basso.
E questo è il codice:
window.onload = function (){var myArray = [] ;var casualiArray = [];var cas;
var str = ´´;var blocco = 1; // blocco attualevar contatore=0;var contatore2 = 0;array_random(); // creo array casuale// mostro il pannello di descrizione dell´immagine
$(´.image´).mouseenter(function(e) {$(this).children(´.panel´).animate({´opacity´:´1´},200);});// nascondo il pannello di descrizione
$(´.image´).mouseleave(function(e){
$(this).children(´.panel´).animate({´opacity´:´0´},200);});// collego i bottoni next e prev alla funzione trans
$(´#prev´).click(function(){
trans(´prev´);});$(´#next´).click(function(){
trans(´next´);});function trans(mode){contatore = 0;
contatore2 = 0;
var simb = 0; // mi serve per gestire il blocco e può essere +1 o-1if (mode == ´next´){
simb = 1;
if (blocco == 2){
return false;}
}
else if (mode==´prev´){
simb = -1;
if (blocco == 1){
return false;}
}
$.each(casualiArray,function(m,v){
contatore++;if (m!=8){$(´#item´+(v+(9*(blocco-1)))).delay(100*contatore*5).animate({´opacity´:0},1000);}
else
{
$(´#item´+(v+(9*(blocco-1)))).delay(100*contatore*5).animate({´opacity´:0},1000,function(){
$(´#gall_box ul li´).css(´opacity´,´0´);if (mode == ´next´){$(´#gall_box ul´).css(´marginTop´,´-705px´);}
if (mode == ´prev´){
$(´#gall_box ul´).css(´marginTop´,´15px´);}
$.each(casualiArray,function(m1,v1){
$(´#item´+((v1+(9*(blocco-1))) + 9*simb)).delay(100*contatore2*5).animate({´opacity´:1},1000);contatore2++;});if (mode == ´next´){blocco++;}
else if (mode == ´prev´){
blocco--;}
});}
});}
function array_random(){
while (casualiArray.length <9){
cas = n_random();checkInArray(cas);}
}
function n_random(){ return Math.round(Math.random()*9); }function checkInArray(){ if ($.inArray(cas,casualiArray) == -1 && cas != 0){
casualiArray.push(cas);}
}
};