2011-12-06 6 views

risposta

8

Qualcosa di simile può funzionare:


$("#div").toggle(
function(){ 
    $("#div").animate({ height:"500px" }, { queue:false, duration:500 }); 
}, 
function(){ 
    $("#div").animate({ height:"50px" }, { queue:false, duration:500 }); 
}); 

Invece della 500px può essere solo la dimensione originale del div, e il 30px può essere per quanto si voglio mostrare quando è destinato a essere nascosto.

+0

Grazie mille! Due cose: 1) Dobbiamo dichiarare sempre l'altezza div originale? Lo sto chiedendo perché ... l'altezza può variare a seconda del contenuto. 2) Se desideriamo, dopo questo, svanire quella piccola porzione che abbiamo appena animato, sarà ok si? – MEM

+1

Ecco un violino che mostra che può consentire diverse altezze se dichiarato in una variabile: http://jsfiddle.net/Skooljester/HdQSX/ E svanire dopo l'animazione non dovrebbe essere un problema. –

+0

Grazie mille per il tuo tempo. Abbastanza chiaro. ;) – MEM

2

Il modo migliore per aprire div alla sua altezza originale è utilizzare slideDown(). Il problema è che questa funzione richiede che div sia nascosto prima che possa aprirlo. La seguente modo è un po 'brutto, ma funziona bene:

$("#test").toggle(
function(){ 
    $("#test").css('height', 'auto').hide().slideDown('fast'); 
}, 
function(){ 
    $("#test").animate({ height:'50px' }, { queue:false, duration:500 }); 
}); 
1

Non consiglio usando il metodo animate di jQuery perché è a volte buggy in alcuni browser. Animare la diapositiva con le transizioni CSS è una scelta migliore (secondo me), impostando l'altezza div o l'altezza massima.

CSS:

.expandable { 
    max-height: 3em; 
    overflow: hidden; 
    transition: max-height .3s; 
} 

al clic, impostare max-height con jQuery:

$(.someSelector).css('max-height', expandedHeight); 

Quindi estrarre il lo stile quando viene cliccato di nuovo:

$(.someSelector).attr('style', ''); 

Potete guardare this demo example

Problemi correlati