![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 11.11.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Ostatnio chciałem pogłębić moją znikomą wiedzę ![]() ![]() plik z kodem: image_rotator html: css:
js:
Ten post edytował wiktorc 11.11.2012, 19:46:34 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 8 Dołączył: 25.02.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
Garść nocnych uwag
![]() 1. Dla bloku obejmującego cały slider użyłbym na Twoim miejscu ID (id="wrapper") i później przy wyszukiwaniu elementów w DOM korzystał z kontekstu. W efekcie przyspieszy to skrypt, bo raz, że samo znalezienie kontekstu będzie dla silnika JavaScript szybkie, bo jQuery skorzysta z natywnej metody getElementById(), a dwa, że każde kolejne przeszukiwanie będzie przeprowadzane w obrębie kontekstu. Przykład poniżej: Kod var context = $('wrapper'); var imgs = $('.image-wrapper img', context); 2. Korzystaj z chaining'u, większość metod jQuery zwraca przetworzony zbiór. Dla jasności: Kod // Zamiast pisać tak: active_obj.css("display","none"); active_obj.removeClass('active'); // Możesz napisać tak: active_obj.css("display","none").removeClass('active'); 3. Dla metody .css() przy większej ilości parametrów przekazuj obiekt. Przykład: Kod //Zamiast active_obj.css("z-index","1"); active_obj.css("display","none"); // Możesz zapisać tak: active_obj.css( { "z-index":"1", "display" :"none" }); 4. Przechowuj w zmiennej długość tablicy, po której iterujesz. Dzięki temu pętla za każdym razem nie będzie musiała przeliczać długości tablicy. Ewentualnie jeżeli masz możliwość możesz korzystać z pętli while i odliczać do 0 (porównywanie z 0 będzie szybsze). Kod // Zamiast: for(i=0; i < imgs.length; i++){..} // Zapisuj tak: var arrLenght = imgs.length; for(i=0; i < arrLenght; i++){ ... } 5. Unikaj tego typu kodu: Kod for(i=0; i<count_of_img; i++){ $(".pagination").append('<div class="page_el pid_'+i+'"></div>'); } Generalnie przeszukiwanie DOM jest mocno kosztowne. Lepiej zrobić tak, że w pamięci tworzysz sobie jakiś element i w pętli append'ujesz do niego kolejne elementy. A dopiero poza pętlą dodajesz to do drzewa DOM. 6. Ten fragment jest zupełnie niepotrzebny. Metoda .each() działa na zbiorach jQuery więc niepotrzebnie przenosisz zbiór do nowej tablicy. Kod var img_arr = []; var pag_arr = []; var imgs = $(".image-wrapper img"); var pags = $(".pagination div"); imgs.each( function(){ img_arr.push($(this)); }); pags.each( function(){ pag_arr.push($(this)); }); for(i=0; i < imgs.length; i++){ img_arr[i].addClass("id_" + i); } 7. Ogólnie masz trochę powtórzeń w kodzie. Postaraj się je wyeliminować ;]. 8. Jeżeli piszesz to jako plugin jQuery to możesz skorzystać z wzorca pluginów. Zdaje mi się, że na stronie jQuery jest gdzieś przykład w jaki sposób je pisać. Weź pod uwagę dodanie obiektu konfiguracyjnego, dzięki któremu przy odpaleniu slidera będzie możliwe skonfigurowanie, np. interwału zmiany obrazków. 9. W instrukcjach warunkowych korzystaj z operatora identyczności (===) zamiast równości (==). ;] Ten post edytował Divinity 12.11.2012, 14:29:25 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 11.11.2012 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki!
Naprawdę pomocna i konstruktywna odpowiedz. Jeśli chodzi o przepisanie tablicy w tablice to faktycznie to było dość głupie ![]() Wiem ze sposób oznaczania zdjęcia względem paginacji jest trochę zamieszany w tej chwili jest całkowicie zależny od timingu w sensie jeśli w jednym miejscy czas wykonania (setTimeout(), setInterval()) jest większy niż w innym zaczyna się wszystko mieszać, może jest jakiś lepszy sposób na rozwiązanie tego. Dzięki za każdą pomoc:) A może, jakie macie sposoby na rozwijanie swoich umiejętności? Jakie sobie stawialiście zadania podczas nauki? Z jakich pomocy korzystacie, literatura, strony internetowe(nie chodzi mi o oficjalną dokumentację)? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 8 Dołączył: 25.02.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mam pytanko jeśli chodzi o punkt 7 czy moglbys mi podać przykład takiego powtórzenia, które można wyeliminować. W wielu miejscach umieszczasz kod manipulujący na klasach CSS i przełączający z-index. Spróbój sobie to wydzielić do osobnej metody, która wykonuje te przekształcenia. Dodatkowo, na przykład 3 razy przeszukujesz DOM zapisujac do zmiennej zbiór: Kod var imgs = $('.image-wrapper img'); //x2 count_of_img = $(".image-wrapper img").length; Zdefiniuj sobie to tylko raz. Zauważyłem jeszcze, że funkcja nextImgs() zwraca 1 (return 1). To chyba też Ci nie jest potrzebne. Poczytaj sobie o konwencjach pisania kodu JavaScript. Dla mnie trochę ciężko czyta się ten kod, do tego zmienne powinny same tłumaczyć co przechowywują, dla przykładu: im_a[i] nie mówi mi nic ![]() Pozdrawiam ;] Ten post edytował Divinity 13.11.2012, 22:04:52 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 24.11.2012 Ostrzeżenie: (0%) ![]() ![]() |
Co do używania append w ciele pętli, lepiej to zrobić w następujący sposób:
lub
Masz utworzonych np. 20 divów i teraz dodajesz tylko dla tych divów określone wartości. Po drugie zamiast operować na klasach lepszym sposobem jest operować na indeksach. Po trzecie zamiast each używaj szybszych pętli, jakie oferuje js. Ten post edytował clapton4321 25.11.2012, 14:05:13 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 05:37 |