jQuery: slideshow a fisarmonica

jQuery: slideshow a fisarmonica

Per ottenere l'effetto di uno slideshow a fisarmonica con jQuery la soluzione più semplice è quella di utilizzare i valori delle tabelle (table e table-cell) CSS, anche se questi non sono supportati da Internet Explorer 7 ed inferiori. Ma poichè noi non possiamo sempre essere costretti a scendere a patti con browser che non rispettano gli standard, in questo esempio useremo tali valori, anche perchè le versioni inferiori di Explorer visualizzeranno semplicemente dei blocchi. Vediamo l'implementazione.

La marcatura è elementare:


<div id="slideshow">

  <div class="slide">
  
    <p>...</p>
  
  </div>
  
  <!-- altre slide -->

</div>

Il CSS usa appunto i valori delle tabelle citati poc'anzi:


#slideshow {
	width: 800px;
	height: 400px;
	margin: 0 auto;
	background: #000;
	color: #fff;
	border: 1em solid silver;
	display: table;
	border-collapse: collapse;
}

div.slide {
	width: 199px;
	height: 400px;
	border-left: 1px solid silver;
	cursor: pointer;
	display: table-cell;
}

div.slide p {
	display: none;
	margin: 0;
	padding: 1em;
}

Con jQuery abbiamo bisogno di tre valori per definire la larghezza delle slide durante l'animazione:

  1. 400: slide espansa
  2. 131: larghezza delle altre slide quando la slide corrente si espande
  3. 199: larghezza predefinita delle slide

Operiamo con il gestore di eventi hover su ciascuna slide, espandendola e mostrando il testo al suo interno e in seguito ridimensionandola e nascondendo nuovamente il testo:


$(function() {

  var fullWidth = 400;
  var resizedWidth = 131;
  var defaultWidth = 199;
  var slides = $('div.slide', '#slideshow');
  
  slides.each(function() {
  
     var slide = $(this);
     var $p = $('p', slide);
     
     slide.hover(function() {
     
       slide.stop(true, true).animate({
         width: fullWidth
       }, 'slow', function() {
       
         $p.fadeIn('slow');
       
       
       });
       
       slides.not(slide).css('width', resizedWidth);
     
     
     
     
     }, function() {
     
     
       slide.stop(true, true).animate({
         width: defaultWidth
       }, 'slow', function() {
       
         $p.fadeOut('slow');
       
       
       });
       
       slides.not(slide).css('width', defaultWidth);
     
     
     });
  
  
  
  });
  


});

Potete visionare l'esempio finale in questa pagina.

Torna su