![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
czy w jQuery istnieje metoda, która nic nie robi? Śpieszę wyjaśnić o co mi chodzi. Lubię korzystać z mechanizmu łańcuchowania i chciałbym zachować kontekst elementu nawet w sytuacji, kiedy dana metoda może (ale nie musi) być wykonana. Chodzi mi konkretnie o taką sytuację:
Dodaję element do body i w zależności od warunku animacja się odbywa lub nie. Dla pewności, że element nie pojawi się przed płynnym pojawieniem się, ukrywam go. Zamierzony efekt mogę oczywiście łatwo osiągnąć rozbijając kod na cztery części, jednak interesuje mnie bardziej eleganckie rozwiązanie. Co myślicie w ogóle o takiej składni? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Metody w jQuery nie wracają nulla ani błędu nawet jeśli element nie istnieje. Plus możesz sobie rozszerzyć na przykład:
Kod (function($)
{ $.fn.alwaysTrue = function() { return true; }; })(jQuery); -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Nie do końca rozumiem Twoją odpowiedź.
Metody w jQuery nie wracają nulla ani błędu nawet jeśli element nie istnieje. Co to ma wspólnego z moim pytaniem? Kod (function($) { $.fn.alwaysTrue = function() { return true; }; })(jQuery); Chyba return $(this) jeśli już? A poza tym wiem, że mogę sobie rozszerzyć, ale nie chcę grzebać w prototypach i stąd moje pytanie o istniejące puste metody. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ma tyle wspólnego że odpowiada dlaczego tak a nie inaczej działa method chaining w jquery.
http://api.jquery.com/jQuery.noop/ Jeśli chcesz zrobić sprawdzanie ifa w ten sposób i tak musisz rozszerzyć/obejść. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Nie mam aż takiego ciśnienia na łańcuchowanie i też zastanawiałem się czy w tym przypadku to na pewno najlepsze wyjście. Wymyśliłem trochę inne obejście problemu - z wykorzystaniem metody first(), last() itd. Są one nieco mylące w tym kontekście i rzeczywiście kod robi się trochę nieczytelny.
To, co zaproponowałeś, to wspomniany przeze mnie podział na cztery części i przy braku "pustej" metody zostanę przy tym rozwiązaniu. Czy taka kolejność wykonywania: ukrycie - dodanie do DOM - fadeIn, jest jedyną w tym przypadku zalecaną kolejnością? Czy wywołanie najpierw fadeIn, a potem append może spowodować efekt pojawienia się elementu, gdy ten jest w trakcie animacji? To takie pytanie raczej do dyskusji, sam zawsze dbam o logiczną kolejność wykonywania. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czy taka kolejność wykonywania: ukrycie - dodanie do DOM - fadeIn, jest jedyną w tym przypadku zalecaną kolejnością? Czy wywołanie najpierw fadeIn, a potem append może spowodować efekt pojawienia się elementu, gdy ten jest w trakcie animacji? Tak i tak. Wyświetlanie elementu w oknie przeglądarki i działanie JS są realizowane w osobnych wątkach dlatego należy pilnować się w kolejności kodu. Innymi słowy, przeglądarka może rozpocząć renderowanie fragmentu strony nim zdążą wykonać się wszystkie Twoje operacje w JS.
Ten post edytował Crozin 15.03.2013, 20:17:28 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tylko naprawdę dlaczego nie chcesz rozszerzyć? Jest to zgrabne wyjście żeby zachować obiekty, zarazem dając czytelną na przyszłość i przenośną składnię.
-------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Czytelną na przyszłość i przenośną? No chyba jednak nie do końca, rozszerzanie jakiegokolwiek prototypu jest ryzykowne - nie wiesz co się pojawi w kolejnych wersjach. Z praktycznego punktu widzenia szkodliwość takiego działania jest oczywiście dość niewielka, jednak uważam to za nieeleganckie rozwiązanie. Już lepiej posłużyć się wzorcem dekoratora.
Ten post edytował SmokAnalog 15.03.2013, 20:49:42 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
No wiesz, ale jeżeli tak podchodzimy do sprawy to racji bytu nie miały by wszystkie wtyczki jQuery (a tych jak wiesz trochę jednak powstało). Tym bardziej że do tego zadania nie potrzebujesz super wymyślnych operacji tylko parę linijek kodu.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 1.07.2025 - 16:56 |