jQuery: accordion ad effetto composito

jQuery: accordion ad effetto composito

Possiamo creare un accordion dall'effetto di espansione e contrazione composito con jQuery operando sia sul contenitore che sui contenuti dell'accordion. Di fatto useremo due effetti su due elementi distinti. Vediamo i dettagli dell'implementazione.

Abbiamo la seguente struttura HTML ripetuta:


<div class="accordion">
	<h3>...</h3>
	<div class="accordion-content">
		<p>...</p>
	</div>
</div>

Opereremo prima sull'elemento accordion-content e quindi sul paragrafo al suo interno. Entrambi gli elementi vengono inizialmente nascosti grazie a regole CSS, che sono le seguenti:


div.accordion {
	overflow: hidden;
	font-size: 1.2em;
}

div.accordion h3 {
	background: rgb(254,255,232); /* Old browsers */
background: -moz-linear-gradient(top, rgba(254,255,232,1) 0%, rgba(214,219,191,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(254,255,232,1)), color-stop(100%,rgba(214,219,191,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(254,255,232,1) 0%,rgba(214,219,191,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(254,255,232,1) 0%,rgba(214,219,191,1) 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, rgba(254,255,232,1) 0%,rgba(214,219,191,1) 100%); /* IE10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#feffe8', endColorstr='#d6dbbf',GradientType=0 ); /* IE6-9 */
background: linear-gradient(top, rgba(254,255,232,1) 0%,rgba(214,219,191,1) 100%); /* W3C */
    height: 2em;
    line-height: 2;
    text-indent: 20px;
    font-size: 1.4em;
    border: 1px solid #ccc;
    cursor: pointer;
    border-radius: 12px;
}

div.accordion-content {
	background: #ccc;
	margin: 1em 0;
	line-height: 1.4;
	border-radius: 12px;
	display: none;	
}

div.accordion-content p {
	margin: 0;
	padding: 1em;
	display: none;
}

Animeremo il primo elemento mostrandolo e attribuendogli un'altezza, mentre per il secondo useremo il metodo slideDown(). Useremo lo stesso procedimento, ma all'inverso, per nascondere gli elementi:


$(function() {

	$('div.accordion', 'body').each(function() {
	
		var $div = $(this);
		var $h3 = $('h3', $div);
		var next = $h3.next();
		var $p = $('p', next);
		
		$h3.click(function() {
		
			if(next.is(':hidden')) {
			
				next.animate({
					visibility: 'show',
					height: 200
				}, 'slow', function() {
				
					$p.slideDown('slow');
				
				});
			
			} else {
			
				$p.slideUp('slow', function() {
				
					next.animate({
						height: 0,
						visibility: 'hide'
					}, 'slow');
				
				});
			
			}
		
		});
		
			
	});

});

Nell'evento click assegnato a ciascuna intestazione verifichiamo che l'accordion sia nascosto o meno. Se lo è, eseguiamo le animazioni sul contenitore e il paragrafo per mostrarli in sequenza. Se non lo è, nascondiamo entrambi gli elementi con un procedimento e una sequenza inversa.

Potete visionare l'esempio finale in questa pagina.

Torna su