2011-12-06 9 views

Odpowiedz

8

Coś jak to może działać:


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

Zamiast 500px może być tylko oryginalna wielkość div, a 30px może być jednak znacznie ci chcesz pokazać, kiedy ma być ukryty.

+0

Wielkie dzięki! Dwie rzeczy: 1) Musimy zawsze zadeklarować pierwotną wysokość div? Pytam o to, ponieważ ... wysokość może się różnić w zależności od treści. 2) Jeśli chcemy, po tym, zaniknąć tę małą porcję, którą właśnie animowaliśmy, to będzie ok tak? – MEM

+1

Oto skrzypce pokazujące, że może ono dopuszczać różne wysokości, jeśli zostało zadeklarowane w zmiennej: http://jsfiddle.net/Skooljester/HdQSX/ A wygaszenie po animacji nie powinno stanowić problemu. –

+0

Wielkie dzięki za poświęcony czas. Całkiem jasne. ;) – MEM

2

Lepszym sposobem otwarcia div na jego pierwotną wysokość jest użycie slideDown(). Problem polega na tym, że ta funkcja wymaga ukrycia div, zanim będzie można go otworzyć. następujący sposób jest trochę brzydki, ale działa dobrze:

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

Nie polecam przy użyciu metody animate jQuery, bo to czasami buggy w niektórych przeglądarkach. Animacja slajdu z przejściami CSS jest lepszym wyborem (według mnie), poprzez ustawienie wysokości div lub maksymalnej wysokości.

CSS:

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

na kliknięcie, ustawić max-height z jQuery:

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

Następnie wyjąć stylizacji kiedy jest kliknięty ponownie:

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

Możesz zajrzeć this demo example

Powiązane problemy