2012-06-24 16 views
30

Mam punkt na mojej stronie internetowej, że gdy użytkownik kliknie chciałbym go poszerzyć, używam jQuery na toggleClass tego ...ToggleClass animate jQuery?

expandable: function(e) { 
    e.preventDefault(); 
    $(this).closest('article').toggleClass('expanded', 1000); 
} 

ten pracuje bez zarzutu, tylko chciałbym jakoś to ożywiać. W chrome mój artykuł powoli rośnie do nowego rozmiaru, tylko w Firefoksie "natychmiast" zmienia się bez animacji, czy istnieje sposób, aby to ożywić?

+1

Sprawdź interfejs użytkownika jQuery. – gdoron

+1

@gdoron hi, nice ... – thecodeparadox

Odpowiedz

52

jQuery UI rozszerza jQuery rodzimy toggleClass wziąć drugi opcjonalny parametr: duration

toggleClass(class, [duration]) 

Docs + DEMO

+0

Więc jeśli chcę animować/zaniknąć tę akcję muszę użyć całej biblioteki jQuery UI ?? Czy istnieje inny sposób, aby to zrobić bez interfejsu użytkownika jQuery? – ed1nh0

+0

@ ed1nh0, Możesz utworzyć niestandardowe ui jQuery z tylko częściami, których potrzebujesz. [Zobacz tutaj] (http://jqueryui.com/download/), muszę przyznać, że nie mam pojęcia, w jakiej kategorii powinno być. – gdoron

+3

Aby użyć animowanego toggleClass z jQuery UI, musisz wczytać 'Core' i' Effect Core'. Zobacz http://jqueryui.com/download/#!themeParams=none&components=1000000000000000000010000000000000 –

16

.toggleClass() nie będzie animowany, powinieneś wybrać metodę slideToggle() lub .animate().

+0

Z slideToggle() mogę ustawić minimalną wysokość, więc nie chowa się całkowicie? – Liam

4

Powinieneś spojrzeć na funkcję toggle znalezioną na jQuery. Umożliwi to określenie metody łagodzenia w celu zdefiniowania działania przełącznika.

slideToggle będzie przesuwać tylko w górę iw dół, nie w lewo/w prawo, jeśli tego właśnie szukasz.

Jeśli potrzebujesz klasę być przełączany jak dobrze można deifine że w funkcji toggle z:

$(this).closest('article').toggle('slow', function() { 
    $(this).toggleClass('expanded'); 
}); 
+1

Dzięki @Brombomb, obecnie używam toggleClass() Nie byłem pewien, czy mogę dodać do niego animację. – Liam

+1

dokładnie to, czego szukałem – srb

+2

Jako sidenote (ponieważ na początku tego nie zauważyłem),.toggle() pozwala na animowanie ukrywania lub pokazywania elementu w DOM. Początkowo myślałem, że będzie to ożywiać przejście między stanami klas, co nie jest prawdą. – Matt

1

Powinny mieć zaznaczone, Raz zawarte jQuery UI Library to działało dobrze i było animacji. ..

10

można po prostu użyć przejścia CSS, zobacz this fiddle

.on { 
color:#fff; 
transition:all 1s; 
} 

.off{ 
color:#000; 
transition:all 1s; 
} 
+0

Najlepsze rozwiązanie. Animacja i przejścia CSS mogą zastąpić niezliczone (teraz) niepotrzebne funkcje i działania JavaScriptu i sprawić, że kod będzie dużo lżejszy. Niezły Dario –

5

próbowałem użyć metody toggleClass ukryć element na mojej stronie (przy użyciu widoczność: ukryte w przeciwieństwie do wyświetlenia: brak) z niewielką animacją, ale z jakiegoś powodu animacja nie działałaby (prawdopodobnie ze względu na starszą wersję interfejsu jQuery).

Klasa została usunięta i dodana poprawnie, ale dodany czas nie wydawał się mieć żadnego znaczenia - element został po prostu dodany lub usunięty bez efektu.

Tak, aby rozwiązać ten problem kiedyś drugą klasę w moim sposobie przełączania i zastosowane przejścia CSS zamiast:

CSS:

.hidden{ 
    visibility:hidden; 
    opacity: 0; 
    -moz-transition: opacity 1s, visibility 1.3s; 
    -webkit-transition: opacity 1s, visibility 1.3s; 
    -o-transition: opacity 1s, visibility 1.3s; 
    transition: opacity 1s, visibility 1.3s; 
} 
.shown{ 
    visibility:visible; 
    opacity: 1; 
    -moz-transition: opacity 1s, visibility 1.3s; 
    -webkit-transition: opacity 1s, visibility 1.3s; 
    -o-transition: opacity 1s, visibility 1.3s; 
    transition: opacity 1s, visibility 1.3s; 
} 

JS:

function showOrHide() { 
     $('#element').toggleClass("hidden shown"); 
    } 

Thanks @ tomas.satinsky za niesamowitą (i super prostą) odpowiedź na this post.

Powiązane problemy