2011-08-05 14 views
8

Chcę wykonać następujące czynności:serii Fading wiele elementów simutaneously - jquery

$(newPanel, prevBtn, nextBtn, infoPanel).fadeIn(200, function() { 
} 

te Vars są DIV utworzone z jQuery

ale tylko pierwszy element zanika w, naprawdę trzeba wszystkie elementy zanikać w w tym samym czasie. Dowolny pomysł?

Odpowiedz

22

Można użyć metody add uzyskać elementy w tym samym obiekcie jQuery:

newPanel.add(prevBtn).add(nextBtn).add(infoPanel).fadeIn(200); 
+0

Ahhh, to całkiem miłe. Spróbuję tego następnym razem. – inquam

+0

@Guffa Dodałem wywołanie zwrotne, a wywołanie zwrotne wykonuje się cztery razy. Czy to normalne w przypadku grupowania? – Wesley

+1

@Wesley: Ponieważ masz cztery elementy w obiekcie jQuery, każda animacja otrzymuje własne wywołanie zwrotne. Z dokumentów: "Jeśli wiele elementów jest animowanych, ważne jest, aby pamiętać, że wywołanie zwrotne jest wykonywane raz na dopasowany element, a nie raz dla animacji jako całości." http://api.jquery.com/fadeIn/ – Guffa

1

Zakładając, że newPanel i tak dalej są zmienne tworzone tak:

newPanel = $("#newPanel"); 

wystarczy napisać:

newPanel.fadeIn(200); 
prevBtn.fadeIn(200); 
nextBtn.fadeIn(200); 
infoPanel.fadeIn(200); 
0
$.each([newPanel, prevBtn, nextBtn, infoPanel], function(i, el) { 
    $(el).fadeIn(200); 
}); 

zmiana:
A jeśli chcesz wywołać funkcję tylko raz, możesz zrobić coś, dodając elementy do: like @Guffa did tej samej kolekcji jQuery, a dopiero potem zastosować animację (raz):

[newPanel, prevBtn, nextBtn, infoPanel] 
    .reduce(function(el, next) { 
     return el.add(next); 
    }) 
    .fadeIn(200); 
+0

Czy to nie będzie to samo, co robienie ich pojedynczo? – 472084

0

Albo zrób to za pomocą $.each zadzwonić lub polecam grupowanie ich według klasy lub identyfikatora i zanikanie przy użyciu tego.

Można na przykład pogrupować wszystkie powiązane elementy w klasach, a następnie wykonać wywołanie $.each na tych klasach zamiast na każdym elemencie.

+0

Jeśli dodaję wywołanie zwrotne, czy zostanie ono wykonane dla każdego elementu, który ma klasę? Chcę tylko wywołanie callback raz. @inquam – Wesley

+1

Masz na myśli to, że jeśli masz wywołanie zwrotne, które ma zostać wywołane, gdy animacja się zakończy, uruchomi się raz dla całej kolekcji elementów używających klasy lub raz dla każdego elementu używającego tej klasy? Właściwie nie wiem na pamięć.Przypuszczam, że wyzwalałoby to raz dla każdego elementu, ponieważ myślę, że jest on dołączony do każdego elementu. Można to pokonać, dodając czek, jeśli wywołanie zwrotne zostało już raz wywołane. Coś jak 'if (! Firsttime) return;'. Być może nie najładniejsza rzecz na świecie, ale zadziała. – inquam

Powiązane problemy