jQuery: portfolio con filtro per categorie

jQuery: portfolio con filtro per categorie

In questo articolo vedremo come creare un portfolio con jQuery e aggiungervi un filtro per categorie. Come vedrete, il codice è incredibilmente semplice una volta che abbiamo compreso il rapporto esistente tra i link del menu delle categorie e i link delle anteprime dei siti. Vediamo insieme i dettagli.

La marcatura è la seguente:


<div id="portfolio">
	<ul id="categories">
		<li><strong>Categorie:</strong></li>
		<li><a href="#" rel="sport">Sport</a></li>
		<li><a href="#" rel="print">Servizi per la stampa</a></li>
		<li><a href="#" rel="culture">Cultura</a></li>
		<li><a href="#" rel="company">Gruppi societari</a></li>
	</ul>
	<ul id="showcase">
	
	  <li>
		
		  <a href="http://www.linea4office.com/" class="print">
		  	<img src="linea4office.jpg" alt="Linea4 Office" />
		  </a>
		
		</li>

	
		<li>
		
		  <a href="http://www.icosfitness.com/" class="sport">
		  	<img src="icosfitness.jpg" alt="Icosfitness" />
		  </a>
		
		</li>
		
		<li>
		
		  <a href="http://www.btmagazine.it/" class="company">
		  	<img src="btmagazine.jpg" alt="BT Magazine" />
		  </a>
		
		</li>
		
				
		<li>
		
		  <a href="http://www.nicolacolecchia.it/" class="culture">
		  	<img src="nicolacolecchia.jpg" alt="Nicola Colecchia" />
		  </a>
		
		</li>
		
		
	
	</ul>
</div>

Il trucco, se così vogliamo chiamarlo, è semplice: il valore dell'attributo rel dei link delle categorie corrisponde al valore delle classi CSS impostate sui link delle anteprime.

Saputo questo, possiamo filtrare i risultati con un ciclo jQuery che riduce l'opacità di quegli elementi i cui link non hanno la classe CSS specificata:


var Portfolio = new function() {

	var categories = $('li', '#categories').not(':first');
	var showCases = $('li', '#showcase');
	
	this.init = function() {
	
		categories.each(function() {
		
			var $li = $(this);
			var $a = $('a', $li);
			var rel = $a.attr('rel');
			
			$a.click(function(event) {
			   
			   showCases.css('opacity', 1);
			
			   showCases.each(function() {
			   
			   		var showCase = $('a', $(this));
			   		
			   		if(!showCase.hasClass(rel)) {
			   		
			   			$(this).css('opacity', 0.5);
			   		
			   		}
			   
			   
			   });
			
			
				event.preventDefault();
			});
		
		
		});
	
	};

}();

Usiamo il metodo hasClass() per verificare se gli elementi hanno o meno la classe CSS del link corrispondente delle categorie. Il nostro codice viene usato nel seguente modo quando il DOM ha ultimato il suo caricamento:


$(function() {

	Portfolio.init();

});

Potete visionare l'esempio finale in questa pagina.

Torna su