jQuery: slideshow di immagini con effetto maschera

jQuery: slideshow di immagini con effetto maschera

Una maschera è semplicemente un'immagine semitrasparente che svolge la funzione di layer sovrapposto alle immagini principali di uno slideshow jQuery. Per ottenere questo effetto è necessario posizionare un elemento vuoto sopra ogni immagine, nasconderlo e quindi mostrarlo al momento dello scorrimento dello slideshow. Vediamo come.

Per questo esempio ho usato tre foto scattate da mio fratello Giancarlo. La struttura HTML che le contiene è la seguente:


<div id="slideshow">
	<div id="slideshow-wrapper">
		<div class="slide">
			<img src="1.jpg" alt="" />
			<div class="overlay"></div>
		</div>
		<div class="slide">
			<img src="2.jpg" alt="" />
			<div class="overlay"></div>
		</div>
		<div class="slide">
			<img src="3.jpg" alt="" />
			<div class="overlay"></div>
		</div>
	</div>
</div>

Appare evidente che sarà l'elemento con classe overlay a creare l'effetto maschera, cosa che appare ancora più evidente dal codice CSS:


#slideshow {
	margin: 2em auto;
	width: 650px;
	height: 396px;
	position: relative;
	overflow: hidden;
}

#slideshow-wrapper {
	width: 1950px;
	height: 396px;
	position: relative;
}

#slideshow-wrapper div.slide {
	width: 650px;
	height: 396px;
	float: left;
	position: relative;
}

#slideshow-wrapper div.slide img {
	display: block;
	width: 100%;
	height: 100%;
}

#slideshow-wrapper div.slide div.overlay {
	width: 100%;
	height: 100%;
	position: absolute;
	top: 0;
	left: 0;
	background: url(mask.png) no-repeat;
	display: none;
}

L'immagine sovrapposta è divisa lungo la sua diagonale in due aree: la prima è completamente trasparente, mentre la seconda è semitrasparente. Dato che vogliamo ottenere un effetto di entrata simile ad un taglio lungo la diagonale dell'immagine corrente, useremo il metodo slideDown():


var Slideshow = new function() {

	var timer = null,
	    index = 0,
	    wrapper = $('#slideshow-wrapper', '#slideshow'),
	    slides = $('div.slide', wrapper);
	    
	var getSlidePositions = function() {
	
		var positions = [];
		slides.each(function(i) {
		
			var left = $(this).position().left;
			
			positions[i] = left;
		
		});
		
		return positions;
	
	};
	
	
	var autoSlide = function() {
	
		var offsets = getSlidePositions();
		timer = setInterval(function() {
		
		    index++;
		    
		    if(index == offsets.length) {
		    
		    	index = 0;
		    	
		    	$('div.overlay', wrapper).hide();
		    
		    }
		
			wrapper.animate({
				left: - offsets[index]
			}, 1000, function() {
			
				slides.eq(index).
				find('div.overlay').
				slideDown(1000);
			
			});
		
		
		
		}, 2000);
		
	
	
	};
	
		
	this.init = function() {
		
		autoSlide();
		
	
	};


}();

$(function() {

	Slideshow.init();

});

Il cuore del nostro codice è racchiuso in queste tre righe:


slides.eq(index).
find('div.overlay').
slideDown(1000);

Usiamo l'indice incrementale del timer per selezionare la slide corrente e quindi il suo elemento sovrapposto. Potete visionare l'esempio finale in questa pagina.

Torna su