plik


ÿþ TytuB oryginaBu: jQuery: Novice to Ninja by Earle Castledine and Craig Sharkie TBumaczenie: Marek Ptlicki ISBN: 978-83-246-3618-1 © Helion S.A. 2012 Authorized translation of the English edition of jQuery: Novice to Ninja, 1st Edition ISBN 9780980576856 © 2010, SitePoint Pty. Ltd. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrze|one. Nieautoryzowane rozpowszechnianie caBo[ci lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metod kserograficzn, fotograficzn, a tak|e kopiowanie ksi|ki na no[niku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki wystpujce w tek[cie s zastrze|onymi znakami firmowymi bdz towarowymi ich wBa[cicieli. Autor oraz Wydawnictwo HELION doBo|yli wszelkich staraD, by zawarte w tej ksi|ce informacje byBy kompletne i rzetelne. Nie bior jednak |adnej odpowiedzialno[ci ani za ich wykorzystanie, ani za zwizane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponosz równie| |adnej odpowiedzialno[ci za ewentualne szkody wynikBe z wykorzystania informacji zawartych w ksi|ce. Wydawnictwo HELION ul. Ko[ciuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (ksigarnia internetowa, katalog ksi|ek) Pliki z przykBadami omawianymi w ksi|ce mo|na znalez pod adresem: ftp://ftp.helion.pl/przyklady/jqnoni.zip Drogi Czytelniku! Je|eli chcesz oceni t ksi|k, zajrzyj pod adres http://helion.pl/user/opinie/jqnoni Mo|esz tam wpisa swoje uwagi, spostrze|enia, recenzj. Printed in Poland. " Kup ksi|k " Ksigarnia internetowa " Pole ksi|k " Lubi to! » Nasza spoBeczno[ " OceD ksi|k Spis tre ci Wst p ........................................................................................................................11 Kto powinien przeczyta t ksi k .............................................................................11 Co znajdziesz w tej ksi ce .........................................................................................12 Podzi kowania ...........................................................................................................14 Konwencje zastosowane w ksi ce .............................................................................14 Rozdzia 1. Zakocha si w jQuery ............................................................. 17 Co szczególnego ma w sobie jQuery? .........................................................................18 Zgodno z ró nymi przegl darkami .....................................................................18 Selektory CSS3 ......................................................................................................19 U yteczne narz dzia .............................................................................................19 jQuery UI ..............................................................................................................19 Wtyczki .................................................................................................................20 Czysto kodu HTML .............................................................................................21 Szeroka popularno .............................................................................................21 Gdzie jest haczyk? ......................................................................................................22 Pobieranie i instalacja jQuery .....................................................................................23 Pobieranie jQuery .................................................................................................23 Google CDN .........................................................................................................24 Codzienne wersje rozwojowe i Subversion ...........................................................25 Wersja nieskompresowana czy skompresowana? .................................................25 Anatomia skryptu jQuery ............................................................................................26 Alias jQuery ..........................................................................................................26 Analiza wywo a jQuery .......................................................................................26 Elementy dokumentu HTML, czyli DOM ......................................................................27 Je li si zdecydujesz& ...............................................................................................29 Rozdzia 2. Wybieranie, dekorowanie i rozszerzanie ............................... 31 Czekamy na za adowanie strony .................................................................................32 Selektory  serce jQuery ...........................................................................................32 Proste selektory ....................................................................................................33 Zaw anie selekcji ................................................................................................35 Testujemy selekcj ................................................................................................35 Filtry .....................................................................................................................36 Wybieranie wielu elementów ...............................................................................36 Jak tworzy dobre selektory ..................................................................................37 Pole ksi|k Kup ksi|k 6 jQuery. Od nowicjusza do wojownika ninja Dekorowanie  obs uga CSS w jQuery ......................................................................37 Odczytywanie w a ciwo ci CSS .............................................................................37 Ustawianie w a ciwo ci CSS .................................................................................38 Klasy ....................................................................................................................40 Rozszerzanie  dodawanie efektów za pomoc jQuery .................................................42 Ukrywanie i wy wietlanie elementów ...................................................................42 Stopniowe udoskonalanie .....................................................................................46 Dodawanie elementów ........................................................................................47 Usuwanie istniej cych elementów ........................................................................49 Modyfikowanie istniej cych elementów ................................................................50 Podstawowe animacje  efektowne ukrywanie i wy wietlanie ...........................50 Funkcje zwrotne ...................................................................................................52 Kilka sztuczek .............................................................................................................53 Pod wietlanie przy najechaniu mysz ...................................................................53 S odkie tajemnice .................................................................................................54 Zanim przejdziemy dalej .............................................................................................55 Rozdzia 3. Animacje, przewijanie i zmiana rozmiaru .............................. 57 Animacje ....................................................................................................................57 Animowanie w a ciwo ci CSS ...............................................................................57 Animacja koloru ...................................................................................................59 Dynamika animacji ...............................................................................................60 Zaawansowane opcje dynamiki ............................................................................61 Podskakuj ce panele ............................................................................................62 Kolejka animacji ...................................................................................................65 a cuchy metod ...................................................................................................65 Zatrzymywanie a cucha ......................................................................................66 Animowana nawigacja .........................................................................................67 Animowana nawigacja, wersja 2 ..........................................................................69 Biblioteka jQuery UI ..............................................................................................71 Daj si poruszy ! ..................................................................................................73 Przewijanie .................................................................................................................73 Zdarzenie przewijania ...........................................................................................73 P ywaj ca nawigacja ............................................................................................74 Przewijanie dokumentu ........................................................................................75 Modyfikacja paska przewijania .............................................................................77 Zmiana rozmiaru ........................................................................................................78 Zdarzenie zmiany rozmiarów ................................................................................79 Elementy obs uguj ce zmian rozmiaru ................................................................81 W a nie tak si animuje, przewija i zmienia wymiary ..................................................86 Pole ksi|k Kup ksi|k SPIS TRE CI 7 Rozdzia 4. Ilustracje i pokazy slajdów ...................................................... 87 Lightbox .....................................................................................................................87 W asna wersja lightboksa .....................................................................................88 Diagnozowanie skryptu za pomoc console.log ....................................................91 ColorBox  wtyczka typu lightbox .......................................................................92 Przycinanie ilustracji za pomoc Jcrop ........................................................................95 Pokazy slajdów ..........................................................................................................98 Pokazy slajdów z przenikaniem .............................................................................98 Przewijane pokazy slajdów .................................................................................109 Wid et galerii obrazów w stylu iPhoto ................................................................115 Pe ny obraz ..............................................................................................................120 Rozdzia 5. Menu, karty, dymki i panele ................................................. 121 Menu .......................................................................................................................121 Rozwijane menu pionowe ..................................................................................122 Ikony stanu zwini cia lub rozwini cia menu .......................................................126 Rozwijanie menu po zatrzymaniu nad nim wska nika myszy ..............................127 Rozwijane menu poziome ...................................................................................128 Menu akordeonowe .................................................................................................132 Prosty akordeon .................................................................................................132 Akordeony wielopoziomowe ..............................................................................135 Akordeon w jQuery UI ........................................................................................137 Karty ........................................................................................................................138 Prosta implementacja kart ..................................................................................138 Karty w jQuery UI ...............................................................................................140 Panele ......................................................................................................................143 Pojawiaj cy si formularz logowania ..................................................................143 Panel wysuwany ................................................................................................145 Dymki podpowiedzi ..................................................................................................147 Proste dymki podpowiedzi ..................................................................................148 Zaawansowany dymek podpowiedzi ..................................................................151 Zamówienie z menu .................................................................................................156 Rozdzia 6. Konstrukcja, AJAX i interakcje .............................................. 157 Konstrukcja  najlepsze praktyki .............................................................................157 Czystsze jQuery ..................................................................................................158 Szablony po stronie klienta .................................................................................162 Programowanie pod k tem wersji przegl darki (jest z e) .....................................164 Przyspieszony kurs technologii AJAX ........................................................................166 Czym jest AJAX? .................................................................................................166 adowanie zewn trznego kodu HTML ................................................................166 Rozszerzanie mo liwo ci odno ników za pomoc techniki hijax ..........................167 Pole ksi|k Kup ksi|k 8 jQuery. Od nowicjusza do wojownika ninja Wybieranie fragmentu kodu HTML za pomoc selektorów ..................................168 Zaawansowane mechanizmy metody load() ........................................................169 Przygotuj si na przysz o  live oraz die .........................................................170 Pobieranie danych za pomoc metody $.getJSON() .............................................171 Wyszukiwarka komentarzy Twittera po stronie klienta ........................................172 Narz dzia obs ugi AJAX w jQuery .......................................................................173 Cz sto u ywane ustawienia da AJAX .............................................................174 adowanie zewn trznych skryptów  $.getScript() ............................................174 dania GET i POST ............................................................................................175 Zdarzenia zwi zane z daniami AJAX ................................................................175 Interakcja z u yciem technologii AJAX ......................................................................176 Galeria obrazów oparta na AJAKSIE ....................................................................177 S owa kluczowe obrazów ...................................................................................189 Wojownicy ninja, mistrzowie techniki AJAX? Obecni! ...............................................193 Rozdzia 7. Formularze, wid ety i okna dialogowe .............................. 195 Formularze ...............................................................................................................195 Prosta walidacja formularzy ................................................................................196 Walidacja formularzy z wtyczk Validation .........................................................199 Wska nik maksymalnej d ugo ci tekstu ...............................................................201 Wskazówki formularza ........................................................................................202 Zaznaczenie pól opcji ..........................................................................................204 Programowe modyfikowanie warto ci pól ..........................................................205 Autouzupe nianie ...............................................................................................208 Wid et oceny ......................................................................................................210 Elementy kontrolne ..................................................................................................215 Wid et wyboru daty ...........................................................................................215 Suwaki ...............................................................................................................218 Przeci gnij i upu ..............................................................................................221 Sortowanie obiektów w jQuery UI ......................................................................226 Pasek post pu ....................................................................................................228 Okna dialogowe i powiadomienia ............................................................................230 Proste modalne okno dialogowe ........................................................................230 Dialog z jQuery UI ..............................................................................................233 Powiadomienia w stylu Growl ............................................................................236 Powiadomienia 1-up ..........................................................................................238 Zmiana formularzy na lepsze ....................................................................................241 Rozdzia 8. Listy, drzewa i tabele ............................................................. 243 Listy .........................................................................................................................243 Element selectable z jQuery UI ............................................................................244 Sortowanie list ...................................................................................................249 Zarz dzanie listami pól wyboru ..........................................................................250 Pole ksi|k Kup ksi|k SPIS TRE CI 9 Drzewa .....................................................................................................................254 Drzewo rozwijane ...............................................................................................254 Delegacja zdarze ..............................................................................................257 Tabele ......................................................................................................................259 Blokada nag ówków tabeli .................................................................................259 Powtarzanie nag ówka .......................................................................................262 Siatki danych ......................................................................................................264 Zaznaczanie wierszy tabel z u yciem pól opcji ....................................................272 Pocz tek listy sukcesów ............................................................................................274 Rozdzia 9. Wtyczki, motywy i techniki zaawansowane ........................ 277 Wtyczki ....................................................................................................................277 Tworzenie wtyczki ..............................................................................................278 Zagadnienia zaawansowane ....................................................................................285 Rozszerzanie jQuery ............................................................................................285 Zdarzenia ...........................................................................................................290 Inne szczegó owe zagadnienia szkolenia wojownika ninja jQuery ............................300 Unikanie konfliktów nazw ..................................................................................300 Kolejkowanie animacji i usuwanie kolejki ...........................................................301 Traktowanie obiektów JavaScript tak jak obiektów jQuery ..................................303 Tworzenie motywów wizualnych ..............................................................................304 U ywanie galerii motywów ................................................................................304 Definiowanie w asnego motywu ........................................................................305 Obs uga motywów we w asnych komponentach ................................................306 StarTrackr!  epilog ................................................................................................308 Dodatek A Podr czna ci gawka ............................................................. 309 Opcje metody $.ajax() ...............................................................................................309 Flagi ...................................................................................................................309 Ustawienia .........................................................................................................310 Funkcje obs ugi zdarze AJAX i funkcje zwrotne .................................................312 Opcje $.support ........................................................................................................312 Zdarzenia .................................................................................................................315 W a ciwo ci zdarze ...........................................................................................315 Metody zdarze ..................................................................................................315 W asne obiekty zdarze ......................................................................................316 Dodatek B Specyfika j zyka JavaScript ................................................... 317 Koercja typów ..........................................................................................................317 Operatory równo ci ..................................................................................................318 Prawda i fa sz ...........................................................................................................319 Pole ksi|k Kup ksi|k 10 jQuery. Od nowicjusza do wojownika ninja Dodatek C Zaawansowane narz dzia do tworzenia wtyczek ........................ 321 Selektor i kontekst ....................................................................................................321 Stos jQuery ...............................................................................................................322 Minimalizacja ...........................................................................................................323 Skorowidz .................................................................................. 325 Pole ksi|k Kup ksi|k Rozdzia Animacje, przewijanie i zmiana rozmiaru Klient jest niezwykle zadowolony z pierwszej rundy naszych zmian i poprawek i chce pój[ jesz- cze dalej. Jego firma wspóBpracuje z przemysBem rozrywkowym i, jego zdaniem, strona WWW powinna odzwierciedla ekscytujc i dynamiczn natur tej gaBzi przemysBu. Wierzy te|, |e atrak- cyjne animacje pomog zwikszy sprzeda|.  Sdz, |e potrzebujemy czego[ zgodnego z Web 2.0, o którym wiele sByszaBem. Czy mo|ecie co[ zrobi, |eby strona bardziej kojarzyBa si z Web 2.0? . Rzeczywi[cie, mo|emy. Klient wrcza nam kolejn list sugerowanych poprawek, peBn ekscytu- jcych zmian. Ta lista pomo|e nam wyj[ poza proste zadania polegajce na ukrywaniu i wy[wie- tlaniu elementów i przybli|y nas do statusu wojownika ninja jQuery. Animacje Biblioteka jQuery powstaBa wBa[nie po to, |eby tworzy animacje. Stopniowe zanikanie komuni- katu o bBdzie po nieudanym logowaniu, rozwijanie menu czy nawet wizualne przewijanie stron tre[ci przypominajce przekBadanie kart ksi|ki lub gry polegajce na strzelaniu do kosmitów: wszystkie te zadania s Batwe do realizacji dziki wbudowanym metodom, wspomaganym niezli- czon rzesz wtyczek. Animowanie w a ciwo ci CSS Do tej pory poznali[my pewne istotne podstawy animacji w jQuery: wsuwanie, zanikanie i efek- towne ukrywanie oraz wy[wietlanie elementów. Nie mieli[my jednak wikszej kontroli nad tym, co jest animowane i w jaki sposób. NadszedB czas na wprowadzenie bardzo wa|nej metody jQuery, nazwanej animate(), która pozwala na zastosowanie animacji do wielu wBa[ciwo[ci CSS, umo|li- wiajc tworzenie niesamowitych efektów na stronach WWW. Przyjrzyjmy si praktycznemu przykBadowi zastosowania tej metody: Pole ksi|k Kup ksi|k 58 jQuery. Od nowicjusza do wojownika ninja rozdzial_03/01_animating_css/script.js (fragment) $('p').animate({ padding: '20px', borderBottom: '3px solid #8f8f8f', borderRight: '3px solid #bfbfbf' }, 2000); Powy|szy kod realizuje animacj na wszystkich akapitach strony, zmieniajc atrybut padding z do- my[lnej warto[ci do 20px oraz dodajc ramk u góry i po prawej stronie. Animacja bdzie wyko- nywaBa si przez dwie sekundy (2000 milisekund). W celu zastosowania metody animate() przekazujemy literaB obiektu okre[lajcy wBa[ciwo[ci, które maj by animowane. WBa[ciwo[ci s okre[lane jako pary klucz:warto w taki sam sposób jak w metodzie css(). Nale|y jednak pamita o jednej istotnej zasadzie: zamiast margin-left nale|y zastosowa nazw marginLeft, a zamiast background-color nazw backgroundColor, czyli nie wolno u|ywa nazw wBa[ciwo[ci z Bcznikiem, a nale|y stosowa konwencj nazw camelCase. Ka|da nazwa wBa[ciwo[ci CSS zawierajca Bcznik musi by zmodyfikowana w ten sposób1. Parametr czasu animacji dziaBa tak samo jak w przypadku animacji, które tworzyli[my w roz- dziale 2.: mo|na przekaza liczb okre[lajc czas w milisekundach lub sBowne okre[lenie czasu trwania: slow, fast, normal. Warto[ci wBa[ciwo[ci wymiarowych CSS mog by podane w pikselach, jednostce em, procentach lub punktach, na przykBad mo|na napisa 100px, 10em, 50% lub 16pt. U|yte warto[ci mog te| by wzgldne w stosunku do aktualnych: wystarczy przed warto[ci u|y znaków += lub -=, co spowoduje, |e zostanie ona odpowiednio zwikszona o dodan warto[ lub o ni zmniejszona. U|yjemy tych mo|liwo[ci do tego, aby pozycje w menu nawigacyjnym po- ruszaBy si, gdy najedziemy na nie wskaznikiem myszy, czyli musimy zastosowa metod obsBugi zdarzenia hover(): rozdzial_03/02_relative_css_animation/script.js (fragment) $('#navigation li').hover(function() { $(this).animate({paddingLeft: '+=15px'}, 200); }, function() { $(this).animate({paddingLeft: '-=15px'}, 200); }); Po najechaniu wskaznikiem myszy na pozycj w menu odsunie si ona pBynnie w praw stron. Metody animate mo|na u|y do uzyskania precyzyjnej kontroli nad wy[wietlaniem, ukrywaniem i funkcjami przeBczania widoczno[ci elementów, które poznali[my w rozdziale 2. Wystarczy dla od- powiedniej wBa[ciwo[ci CSS zastosowa warto[ show, hide lub toggle zamiast warto[ci liczbowej: 1 Inny sposób rozwizania tego problemu polega na ujciu w cudzysBowy nazw kluczy zawierajcych niedo- zwolone znaki  przyp. tBum. Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 59 rozdzial_03/03_animate_show_hide (fragment) $('#disclaimer').animate({ opacity: 'hide', height: 'hide' }, 'slow'); Obserwowanie animacji elementów to niezwykle satysfakcjonujcy wynik pracy programisty. W ramach wiczenia pobaw si animowaniem ró|nych atrybutów CSS i spróbuj uzyska ciekawe i unikalne efekty. Metoda animate() obsBuguje wicej opcji, wiele z nich sBu|y do zaawansowanej kontroli parametrów animacji. Omówimy je szczegóBowo w dalszej cz[ci rozdziaBu. Animacja koloru Gdy ju| przekonasz si, jak wiele frajdy daje metoda animate(), zapewne zechcesz animowa ko- lor. Jednak ta operacja jest nieco bardziej skomplikowana, poniewa| po[rednie warto[ci koloru, midzy pocztkowym a koDcowym punktem animacji, musz by wyliczane w specjalny sposób. W przeciwieDstwie do wysoko[ci czy szeroko[ci elementu, które zmieniaj si w prosty, liniowy sposób, do wyliczenia koloru jQuery potrzebuje dodatkowych obliczeD, aby upewni si, |e barwa znajduje si, powiedzmy, w trzech czwartych odlegBo[ci midzy niebieskim a pomaraDczowym. Ten mechanizm wyliczania koloru zostaB pominity w podstawowej bibliotece. Taka decyzja ma sens, je[li si gBbiej zastanowi: w wikszo[ci zastosowaD mechanika animacji koloru nie jest nie- zbdna, dziki czemu plik podstawowej biblioteki mo|e zachowa rozsdne rozmiary. Je[li kto[ chce animowa kolory, potrzebna mu jest wtyczka Color Animations2. U ycie wtyczek Oficjalne repozytorium wtyczek projektu jQuery3 zawiera spory zbiór wtyczek, który stale si rozrasta. Nie- które z nich s bardzo u yteczne, inne mniej. Wtyczki mo na wyszukiwa po nazwie, kategorii (jak efekty czy narz dzia) albo po ocenie przyznanej przez spo eczno u ytkowników jQuery. Gdy ju znajdziesz interesuj c Ci wtyczk , pobierz j do odpowiedniego miejsca w swoim projekcie (najcz ciej b dzie to ten sam katalog, w którym zapisa e plik biblioteki jQuery). Warto przeczyta plik readme lub odpowiedni dokumentacj na stronie WWW, ale najcz ciej wtyczk wystarczy o prostu zaimportowa w dokumencie HTML w ten sam sposób jak inne biblioteki j zyka JavaScript. W jaki sposób korzysta z wtyczki, to ju zagadnienie specyficzne dla ka dej z nich. W tym przypadku nie uniknie si konieczno ci zapoznania z dokumentacj . Po pobraniu i zaimportowaniu wtyczki Color Animations mo|na animowa kolory za pomoc metody animate()  tak samo jak inne wBa[ciwo[ci CSS. Spróbujmy zmieni kolor notki prawnej przez okres dwóch sekund, |eby zwróci na ni uwag u|ytkowników strony. 2 http://plugins.jquery.com/project/color 3 http://plugins.jquery.com/ Pole ksi|k Kup ksi|k 60 jQuery. Od nowicjusza do wojownika ninja rozdzial_03/04_color_animation (fragment) $('#disclaimer').animate({'backgroundColor':'#ff9f5f'}, 2000); Dziki tej technice notka prawna jest znacznie lepiej widoczna. Dynamika animacji Dynamika animacji (ang. easing) okre[la sposób, w jaki prdko[ animacji zmienia si w czasie. Dynamika animacji jest zdefiniowana za pomoc algorytmu matematycznego i pozwala zmienia prdko[ w trakcie trwania animacji. Dziki temu, |e korzystamy z jQuery, mo|emy odBo|y na inn okazj konieczno[ odkurzenia wiadomo[ci z zakresu równaD matematycznych. Standardowa biblioteka jQuery oferuje dwie opcje dynamiki animacji: linear i swing. Ka|de wy- woBanie metody animate() pozwala na u|ycie jednej z tych dwóch opcji kontroli dynamiki. Ró|nic midzy nimi mo|na zobaczy w formie wykresów na rysunku 3.1. Wykres prezentuje sposób, w jaki prdko[ animacji zmienia si w czasie dla ka|dej z tych opcji. Rysunek 3.1. Standardowe opcje dynamiki animacji w jQuery Dynamika typu swing polega na powolnym rozpoczciu, nastpnie prdko[ znacznie si zwik- sza, a przy koDcu znów spada. Wizualnie dynamika typu swing wyglda znacznie naturalniej w porównaniu z dynamik liniow, dlatego jQuery stosuje j domy[lnie w metodzie animate(), je[li dynamika nie zostanie okre[lona w sposób jawny. Dynamika liniowa (opcja linear) nie wykorzystuje przyspieszania ani spowalniania, animacje odby- waj si ze staB prdko[ci. Takie animacje w wikszo[ci przypadków wygldaj do[ nudno i sztyw- no, ale warto wypróbowa t opcj, mo|e okaza si u|yteczna w specyficznych zastosowaniach. W ramach przykBadu dodamy animacj w efekcie kliknicia pierwszego akapitu na naszej stronie WWW: po pierwszym klikniciu powikszymy jego wysoko[, wykorzystujc dynamik liniow, a po drugim zmniejszymy j do oryginalnych rozmiarów, stosujc dynamik typu swing. Ró|nica jest do[ subtelna, ale je[li powtórzysz animacj kilka razy, Batwo j zauwa|ysz. Animacja zmniej- szania wysoko[ci wydaje si bardziej naturalna. rozdzial_03/05_easing/script.js (fragment) $('p:first').toggle(function() { $(this).animate({'height':'+=150px'}, 1000, 'linear'); }, function() { $(this).animate({'height':'-=150px'}, 1000, 'swing'); }); Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 61 W powy|szym listingu znajdziemy sporo szczegóBów specyficznych dla jQuery, warto zatem na chwil si zatrzyma, |eby przeanalizowa ten kod i zrozumie, co si dzieje: za pomoc metody filter() selektora wybieramy tylko pierwszy akapit, do wybranego akapitu podpinana jest metoda obsBugi zdarzenia toggle() (która jest wy- woBywana przy kolejnych klikniciach), w ka|dej funkcji obsBugi zdarzenia wybieramy obiekt this, odwoBujcy si do elementu, na którym zostaBo odpalone zdarzenie (czyli do kliknitego akapitu), pierwsza funkcja obsBugi zdarzenia wykorzystuje format +=, powodujcy zwikszenie wy- soko[ci akapitu o 150 pikseli, wykorzystujc animacj z dynamik liniow, druga funkcja obsBugi zdarzenia wykorzystuje format -=, powodujcy zmniejszenie wyso- ko[ci akapitu o 150 pikseli, wykorzystujc animacj z dynamik typu swing. Je[li zrozumiaBe[ ten przykBad, nale| Ci si gratulacje! Naprawd Bapiesz, o co chodzi w jQuery! Zaawansowane opcje dynamiki Jak wspomnieli[my, dynamika animacji typu swing daje znacznie przyjemniejszy efekt, prawdo- podobnie odpowiedni dla wikszo[ci zastosowaD. Jednak swing i linear to jedynie wierzchoBek góry lodowej, je[li chodzi o mo|liwo[ci w tym zakresie. Do dyspozycji mamy znacznie wicej typów dynamiki. Wikszo[ z nich jest zdefiniowana we wtyczce Easing4, dostpnej w repozytorium wtyczek jQuery. Wtyczki wchodz ce w sk ad jQuery UI Biblioteka Easing jest równie dost pna w sekcji efektów biblioteki jQuery UI, któr b dziemy omawia niebawem. Je li zaczyna Ci m czy du a liczba wtyczek, zajrzyj do punktu  Biblioteka jQuery UI w dal- szej cz ci rozdzia u. Ta biblioteka gromadzi du liczb popularnych wtyczek, mi dzy innymi do obs ugi animacji kolorów, przekszta ce mi dzy klasami i dynamiki animacji. Wystarczy za adowa jedn bibliotek jQuery UI, nie trzeba importowa ka dej z tych wtyczek z osobna. Wystarczy pobra plik JavaScript z kodem wtyczki i zaBadowa go w pliku HTML za importem biblioteki jQuery. Wtyczka Easing nie oferuje nowych metod, zamiast tego mamy do dyspozycji okoBo 30 opcji dynamiki animacji. Wyja[nianie zasad dziaBania ka|dej z nich byBoby doskonaBym testem dla wyobrazni najlepszych pisarzy, zamiast tego proponujemy jednak zapozna si z ry- sunkiem 3.2, który wyja[nia algorytmy dziaBania kilku z opcji w sposób graficzny. Mo|na zauwa|y, |e niektóre algorytmy wychodz poza wykres. W takim przypadku animowany obiekt przechodzi za punkt zatrzymania, |eby po chwili wróci do niego i tam si zatrzyma. Efekt wyglda podobnie do zabawki zaczepionej na gumce, która delikatnie spr|ynujc, przyci- ga j na swoje miejsce. 4 http://plugins.jquery.com/project/Easing Pole ksi|k Kup ksi|k 62 jQuery. Od nowicjusza do wojownika ninja Rysunek 3.2. Zaawansowane opcje dynamiki animacji Dodatkowych algorytmów dynamiki animacji u|ywa si tak samo jak dostpnych standardowo: wystarczy poda ich identyfikator w parametrze metody animate(). Mamy spory wybór, warto wic wypróbowa choby kilka z nich, |eby nabra wyobra|enia o ich dziaBaniu: rozdzial_03/06_other_easing_options/script.js (fragment) $('p:first').animate({height: '+=300px'}, 2000, 'easeOutBounce'); $('p:first').animate({height: '-=300px'}, 2000, 'easeInOutExpo'); $('p:first').animate({height: 'hide'}, 2000, 'easeOutCirc'); $('p:first').animate({height: 'show'}, 2000, 'easeOutElastic'); Tylko popatrz, jak skacze ten akapit! Zapewne zastanawiasz si, skd wziBy si nazwy opcji dy- namiki animacji, albo chcesz pozna ich peBn list. Twórc algorytmów jest Robert Penner, któ- ry algorytmy dynamiki animacji zdefiniowaB w formie formuB matematycznych i umie[ciB na swojej stronie WWW5. Najlepszym sposobem na zapoznanie si z formuBami stojcymi za ka|d z opcji dynamiki jest analiza kodu zródBowego wtyczki Easing. Czas na zabaw Zrób sobie przerw i przetestuj opcje dynamiki animacji zdefiniowane przez wtyczk . Istnieje niewielka szansa, e b dziesz kiedykolwiek w stanie u y wszystkich, ale ich znajomo pozwoli dokona wiado- mego wyboru tej z nich, która najlepiej odpowiada Twoim oczekiwaniom. Poza tym zabawa z funkcjami pomaga utrwali ich znajomo , co jest bardzo wa n broni w r kach wojownika ninja jQuery! Podskakuj ce panele Dowiedzieli[my si nieco na temat metody animate(), zajrzyjmy wic do najnowszej listy zmian zgBoszonych przez klienta. Dzisiejsza lista dotyczy niezwykle istotnej nowo[ci w serwisie Star- Trackr!  chodzi o codziennie modyfikowan list celebrytów pod nazw  Kto jest w tej chwili na to- pie? (w skrócie KJWTCNT). Ta lista ma zawiera informacje o celebrytach, o których z jakich[ 5 http://www.robertpenner.com/easing/ Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 63 powodów (pozytywnych lub negatywnych) nagle zrobiBo si gBo[no, wraz z ich zdjciem i krótk informacj biograficzn. List zaimplementujemy za pomoc animacji i technik definiowania dy- namiki w postaci ruchomych paneli, które mog by niezale|nie otwierane lub zamykane. Wygld tego wid|etu przedstawia rysunek 3.3. Rysunek 3.3. Panele informacji o celebrytach W naszym HTML-u ten element strony zaimplementujemy w postaci obiektu div zawierajcego informacje o wszystkich celebrytach. Ka|dy panel bdzie skBadaB si z nagBówka h3, po którym wystpi kolejny obiekt div zawierajcy zdjcie i krótki akapit: rozdzial_03/07_bouncy_content_panes/index.html (fragment) <div id="bio"> <h2> Kto jest w tej chwili na topie?</h2> <h3>Staszek adny</h3> <div> <img src="../../images/beau_100.jpg" width="100" height="100 "/> <p>Notka o Staszku</p> </div> <h3>Jurek Co</h3> <div> <img src="../../images/johnny_100.jpg" width="100" height="100 "/> <p>Notka o Jurku</p> </div> <h3>Bubatronik</h3> <div> <img src="../../images/glenda_100.jpg" width="100" height="100 "/> <p>Notka o Bubatronik</p> </div> </div> Gdy u|ytkownik klika jeden z nagBówków, panel rozwija si lub zwija, zale|nie od stanu. Panele mo|na dowolnie stylizowa, ale najcz[ciej stosowana technika polega na uzyskaniu nagBówka o wyró|niajcym si kolorze tBa, co jasno sugeruje, |e to jest element, który mo|na klikn. Pole ksi|k Kup ksi|k 64 jQuery. Od nowicjusza do wojownika ninja Skacz ca animacja Warto mie wiadomo jednego szczegó u zwi zanego z animowaniem obiektów: gdy animowany obiekt znajduje si blisko nag ówka, animacja  szarpie , co jest szczególnie widoczne przy ukrywaniu. Dzieje si tak dlatego, e margines nag ówka jest usuwany po ukryciu obiektu le cego bezpo rednio za nim. Proste obej cie tego problemu polega na ustawieniu marginesów nag ówka na zero. Chcemy unikn wy[wietlania paneli przy Badowaniu strony, wic w pierwszym kroku ukryjemy wszystkie obiekty zawierajce tre[: rozdzial_03/07_bouncy_content_panes/script.js (fragment) $('#bio > div').hide(); Je[li jednak chcemy, |eby który[ z paneli byB domy[lnie wy[wietlony, mo|emy to okre[li w tym miejscu. To u[wiadomi u|ytkownikom, |e pod nagBówkami istniej ukryte panele, wic warto je klik- n. Implementacja tego w jQuery to proste zadanie: wykorzystujemy filtr :first, za pomoc którego wybieramy pierwszy panel, po czym go wy[wietlamy. $('#bio > div:first').show(); Selektor potomków W powy szym przyk adzie zastosowali my nowy selektor, o którym warto powiedzie nieco wi cej. Jest to selektor potomków, wykorzystuj cy znak wi kszo ci (>). Selektor potomków wybiera element nad- rz dny (lewa strona znaku >), a nast pnie jego elementy podrz dne (jeden poziom w dó ) dopasowane do podselektora (po prawej stronie znaku >). Je li pominiemy selektor potomka (znak >), ten kod wybierze wszystkie elementy div znajduj ce si w elemencie o id równym bio, nawet je li znajd si na innym poziomie zagnie d enia. Wi cej na temat tego selektora mo na znale w dokumentacji jQuery6. Nasz dokument zawiera ju| niezbdny kod HTML, wystarczy wic doda troch kodu jQuery do obsBugi interakcji. Ujawnienie ukrytej tre[ci wymaga obsBugi zdarzenia click, odszukania nastp- nego elementu (w którym znajduje si tre[) i wy[wietlenia go, co ju| robili[my w rozdziale 2. Tym razem jednak zastosujemy dynamik animacji typu bounce, co spowoduje, |e panele bd si zachowywa jak upadajca piBka, która chwil podskakuje, zanim si zatrzyma: rozdzial_03/07_bouncy_content_panes/script.js (fragment) $('#bio h3').click(function() { $(this).next().animate( {'height':'toggle'}, 'slow', 'easeOutBounce' ); }); Doskonale sprawdzajcy si w tym przypadku efekt podskakujcej piBki realizuje opcja dynamiki easeOutBounce. Koniecznie sprawdz jego dziaBanie w przegldarce. 6 http://docs.jquery.com/Selectors/child Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 65 Kolejka animacji Kolejnym zagadnieniem zwizanym z metod animate() s opcje dodatkowe. WywoBanie wygl- da nastpujco: animate(parametry, opcje); Opcje definiuje si w postaci literaBu obiektu (zbiór par klucz:warto ). Znamy ju| kilka z nich: czas trwania (ang. duration), dynamika (ang. easing) czy funkcja zwrotna wykonywana po zakoD- czeniu animacji (complete). Istniej jeszcze dwie: step i queue. Zanim je wyja[nimy, rzumy okiem na skBadni wywoBania funkcji animate z u|yciem opcji: rozdzial_03/08_animation_queue/script.js (fragment) $('p:first').animate( { height: '+=100px', backgroundColor: 'green' }, { duration: 'slow', easing: 'swing', complete: function() {alert('gotowe!');}, queue: false } ); Warto pamita, |e wikszo[ mo|liwo[ci metody animate() mo|na wykorzysta z u|yciem pro- stej skBadni. SkBadnia zBo|ona jest u|ywana wyBcznie w celu wykorzystania bardziej zaawanso- wanych mo|liwo[ci, jak parametr queue. Parametr ten sBu|y do kontroli kolejki (ang. queue) animacji, które maj by wykonane na ele- mencie. WywoBanie metody animate() na elemencie powoduje dodanie tej animacji do kolejki. Element wykonuje kolejk sekwencyjnie a| do jej wyczerpania. Aatwo to zauwa|y, je[li wykona si sekwencj szybkich klikni na animowanym obiekcie. Istnieje jednak wiele sytuacji, w których tego typu zachowanie jest niepo|dane. Czasem chcemy, aby kilka animacji odbywaBo si jednocze[nie. Je[li wyBczymy kolejk animacji, kolejne animacje bd wykonywane równolegle. Kolejka animacji jest kontrolowana za pomoc parametru queue oraz metod stop(), queue() i dequeue(). Ta kombinacja metod i parametrów daje nam elastyczn kontrol nad dziaBaniem anima- cji. Zanim jednak zagBbimy si w tajniki kontroli animacji, powinni[my pozna jedn z najwa|- niejszych technik zwizanych z jQuery. a cuchy metod Do tej pory wyra|enia jQuery wykonywali[my sekwencyjnie, jedno po drugim, ewentualnie za- gnie|d|ali[my je w ramach funkcji zwrotnych. W celu ponownego u|ycia selektora musieli[my wywoBa go ponownie lub u|y obiektu this. Biblioteka jQuery obsBuguje jednak mechanizm Pole ksi|k Kup ksi|k 66 jQuery. Od nowicjusza do wojownika ninja pozwalajcy wykona kilka metod na tym samym selektorze. Mechanizm ten nazywamy BaDcu- chem (ang. chaining) i przej[cie na poziom ninja wymaga znajomo[ci tego szczegóBu. AaDcuch pozwala wykona wiksz liczb wywoBaD metod jQuery w pojedynczym wyra|eniu. AaDcuch buduje si przez dopisanie metody do innego wyra|enia. Na przykBad poBczmy w BaDcuch metody hide(), slideDown() i fadeOut(). Nasz element szybko znika, potem wje|d|a na swoje miejsce, a na koDcu stopniowo zanika: $('p:first').hide().slideDown('slow').fadeOut(); Mo|emy tworzy BaDcuchy metod o dowolnej dBugo[ci. Nale|y jednak zachowa czujno[: two- rzenie kodu w ten sposób Batwo uzale|nia! Oprócz wykonywania BaDcucha metod na tym samym obiekcie BaDcuch mo|e nawigowa po obiektach DOM, dodawa i usuwa obiekty po drodze, co mo|e prowadzi do do[ potwornych wyra|eD. AaDcuchy metod warto zapisywa w czytelny sposób, przenoszc kolejne wywoBania do kolejnych wierszy. Taki zapis zajmuje wicej miejsca, ale kod jest znacznie czytelniejszy i Batwiejszy w utrzyma- niu. Nasz poprzedni przykBad mo|emy zapisa nastpujco: $('p:first') .hide() .slideDown('slow') .fadeOut(); Nale|y pamita, |e selektor jQuery po ka|dym wywoBaniu metody zawiera zmodyfikowany przez ni wynik, a nie warto[ pocztkow. Oznacza to, |e w kolejnych wywoBaniach metod z BaDcucha mo|emy dodawa i usuwa elementy, a zmiany bd miaBy zastosowanie tylko do aktualnej selekcji. Je[li przyjrzysz si niektórym z naszych wcze[niejszych przykBadów, z pewno[ci znajdziesz przy- padki BaDcuchów metod, na przykBad $(this).next().toggle(). Metoda next() przenosi selektor na kolejny obiekt (rodzeDstwo), a metoda toggle() przeBcza jego stan widoczno[ci, nie narusza- jc oryginalnego obiektu. W pracy z jQuery bdziesz miaB mnóstwo okazji do wykorzystania BaDcuchów metod, dalsza cz[ ksi|ki jest nimi po prostu wypeBniona. Midzy innymi na tym polega rado[ u|ywania jQuery! Zatrzymywanie a cucha Je[li pojawi si potrzeba zatrzymania na chwil BaDcucha metod w trakcie realizacji, mo|na wyko- rzysta metod delay(). Wystarczy poda czas oczekiwania (w milisekundach). Oto prosty przy- kBad takiego u|ycia: $('p:first') .hide() .slideDown('slow') .delay(2000) .fadeOut(); Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 67 To wyra|enie wsunie akapit, odczeka dwie sekundy, po czym spowoduje jego stopniowe zanikanie. Metoda delay() mo|e by doskonaBym sposobem kontroli przebiegu wieloetapowych animacji. Animowana nawigacja Tym razem klient upiera si przy swoim: chce, |eby gBówne menu byBo animacj we Flashu, z wi- zualnymi efektami towarzyszcymi nawigacji.  Flash wyglda lepiej . Zapewniasz go, |e Flasha masz w maBym palcu i |e na szybko co[ przygotujesz. OK, klient wyszedB z pokoju. Czas wykorzysta [wie|o nabyte umiejtno[ci w celu stworzenia efek- townego paska nawigacji, przypominajcego w dziaBaniu animacj Flash. Menu bdzie miaBo fa- lujcy  bbel oznaczajcy dan pozycj, nad któr aktualnie znajduje si wskaznik myszy. Zrobimy to, wykorzystujc wyBcznie wolne technologie: HTML, CSS i JavaScript. A Flash? Nie potrzebu- jemy |adnego Flasha! W przykBadach wykorzystamy tylko podstawowe animacje, dziki czemu bd one Batwe do analizy. Na pocztek zmodyfikujemy CSS obsBugujcy nasze menu, aby wy[wietlaBo si w poziomie, a nie w pionie. Nasz kod HTML dla menu wyglda nastpujco: rozdzial_03/09_animated_navigation/index.html (fragment) <ul id="navigation"> <li><a href="#">Strona g ówna</a></li> <li><a href="#">O nas</a></li> <li><a href="#">Kup teraz!</a></li> <li><a href="#">Pomys na prezent</a></li> </ul> Naszym bblem bdzie pusty element div, ustawiajcy si za elementem nawigacyjnym, nad któ- rym zatrzyma si wskaznik myszy. Zatem pierwsze zadanie dla jQuery polega na utworzeniu ta- kiego elementu i dopisaniu go do dokumentu: rozdzial_03/09_animated_navigation/script.js (fragment) $('<div id="navigation_blob"></div>').css({ width: $('#navigation li:first a').width() + 10, height: $('#navigation li:first a').height() + 10 }).appendTo('#navigation'); Warto zwróci uwag na to, |e w [rodku literaBu obiektu u|ywamy selektora w celu odczytania wymiarów obiektu. Je[li masz do[wiadczenie z programowaniem, nie zdziwi Ci to; nowicjuszy uspokajamy: to nie jest nic nadzwyczajnego, wszdzie tam, gdzie mo|na wpisa warto[ statyczn, mo|na te| u|y wyra|enia wyliczajcego (lub odczytujcego) warto[. Do odczytanych wymiarów dodajemy 10, dziki czemu bbel jest nieco wikszy od elementu menu, za którym ma si znalez. Mamy ju| bbel, teraz potrzebujemy zdarzeD, które wprawi go w ruch. Zdarzeniem bdzie umieszczenie wskaznika myszy nad pozycj w menu, wic u|yjemy metody hover(). Jak pamitamy, metoda ta oczekuje dwóch parametrów: pierwszy okre[la funkcj obsBugi zdarzenia mouseover, drugi funkcj zdarzenia mouseout. Nasze wyra|enie bdzie zatem miaBo nastpujc struktur: Pole ksi|k Kup ksi|k 68 jQuery. Od nowicjusza do wojownika ninja rozdzial_03/09_animated_navigation/script.js (fragment) $('#navigation a').hover(function() { // funkcja obsBugi mouseover . . . }, function() { // funkcja obsBugi mouseout . . . }); Czas na odrobin zabawy. Rzumy okiem na pierwsz funkcj, która jest wywoBywana, gdy za- trzymamy wskaznik myszy nad pozycj menu: rozdzial_03/09_animated_navigation/script.js (fragment) // funkcja obsBugi mouseover $('#navigation_blob').animate( {width: $(this).width() + 10, left: $(this).position().left}, {duration: 'slow', easing: 'easeOutElastic', queue: false} ); Gdy wskaznik myszy zatrzyma si nad pozycj w menu, wykonujemy animacj dwóch atrybutów naszego bbla: szeroko[ci i pozycji. Pozycja elementu jest odczytywana za pomoc metody position(). Metoda ta nie powoduje zmian, po prostu zwraca dwie warto[ci okre[lajce przesunicie lewego górnego wierzchoBka obiektu w stosunku do rodzica. Nas interesuje przesunicie poziome, poniewa| bbel bdzie poruszaB si od lewej do prawej. Opcj queue ustawiamy na warto[ false, poniewa| nie chcemy, aby animacje nawarstwiBy si nam, powodujc zakBócenia wizualne w obsBudze menu (w przypadku u|ytkownika szczególnie nerwowo poruszajcego mysz nad menu). Po przeniesieniu wskaznika na inn pozycj menu rozpocznie si inna animacja, niezale|nie od tego, czy aktualna skoDczyBa dziaBanie. Mimo to musimy poinformowa jQuery o tym, co ma zrobi, gdy u|ytkownik przesunie wskaz- nik myszy poza pozycj w menu. Ten fragment kodu jest do[ podobny do poprzedniego, ale zawiera nieco wicej metod w BaDcuchu: rozdzial_03/09_animated_navigation/script.js (fragment) // funkcja obsBugi mouseout $('#navigation_blob') .stop(true) .animate( {width: 'hide'}, {duration: 'slow', easing: 'easeOutCirc', queue: false} ) .animate( {left: $('#navigation li:first a').position().left;}, 'fast' ); } Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 69 Tym razem poBczyli[my w BaDcuch dwie animacje: pierwsza ukrywa bbel z u|yciem estetycznej dynamiki animacji, druga przenosi go na pozycj pocztkow, czyli lew stron menu. Warto zwróci uwag na metod stop() wykonywan na pocztku obsBugi zdarzenia. Metoda ta robi dokBadnie to, na co wskazuje jej nazwa: zatrzymuje animacj. Akceptuje dwa dodatkowe pa- rametry: clearQueue i gotoEnd. Parametr clearQueue ustawiamy na true, co powoduje wyczysz- czenie kolejki animacji. Parametr gotoEnd jest wykorzystywany w celu ustalenia koDcowego stanu elementu, gdyby kolejka animacji zostaBa wykonana: obiekt jest natychmiast ustawiany w ten stan (bez animacji). W tym przy- padku tego nie chcemy, poniewa| zale|y nam, aby kolejne animacje rozpoczBy si od miejsca, w którym bbel znajduje si w danej chwili, nawet je[li jest wBa[nie w poBowie drogi midzy elementami menu. Pobaw si nieco animacj menu, |eby sprawdzi, jak wBa[ciwy dobór parametrów dynamiki ani- macji wpBywa na uzyskanie naturalnego wra|enia dziaBania interfejsu. To te| doskonaBa okazja, aby sprawdzi inne parametry dynamiki animacji. Wystarczy zastpi proponowane przez nas innymi z dostpnej listy. A| trudno uwierzy, jak wielka jest midzy nimi ró|nica! Mo|na te| animowa inne atrybuty bbla, na przykBad zmienia jego kolor. Animowana nawigacja, wersja 2 Jedn z doskonaBych cech takich bibliotek jak jQuery jest mo|liwo[ szybkiego przetestowania ró|nych alternatywnych rozwizaD i wybrania tego, które dziaBa najlepiej. Do powrotu klienta zostaBo nam kilka godzin. Spróbujmy rozwiza to samo zadanie w nieco in- ny sposób. Zobaczymy, co z tego wyniknie. W tym przypadku nasze pozycje w menu bd miaBy ukryt ikon, która bdzie wyskakiwaBa po naje- chaniu mysz (co przedstawia rysunek 3.4). Konfiguracja tego efektu jest prosta. Mamy zwykB list nienumerowan, skonfigurowan za po- moc CSS w formie poziomej, ale ka|dy element listy posiada dodatkowy, ukryty element defi- niujcy ikon. W tym celu w specjalny sposób jest ustawiana wysoko[ elementu listy, tak |e wi- doczny jest tylko tekst, a na |yczenie wysoko[ jest animowana tak, aby wy[wietli równie| ikon. Rysunek 3.4. Podskakuj ce animowane menu Na pocztek zdefiniujemy style CSS. Nasze menu pozycjonujemy w sposób bezwzgldny w stosunku do kontenera (element div), w którym musimy zadba o wystarczajc ilo[ miejsca na wysuwane ikony. Ikony stanowi tBo elementów tekstowych menu, ale tBo jest przesunite, dziki czemu ikony Pole ksi|k Kup ksi|k 70 jQuery. Od nowicjusza do wojownika ninja nie s widoczne. Wysoko[ elementów tekstowych wynosi 20px, a tBo jest przesunite o 30px w dóB. W efekcie tBo (czyli ikona) nie jest widoczne przy domy[lnej wysoko[ci elementów menu. Ka|da pozycja menu ma ustawion inn ikon w charakterze tBa: rozdzial_03/10_animated_navigation_2/navigation.css (fragment) #container { position: relative; } #navigation { position:absolute; width: inherit; top: 0; right: 0; margin: 0; } #navigation li { height:20px; float:left; list-style-type: none; width:70px; padding:3px; border-right:1px solid #3687AF; background-color: #015287; background-repeat: no-repeat; background-position: center 30px; } #navigation li a { color: #FFFFFF; } #navigation #home{ background-image:url('icon_home.png'); } . . . Jedyn nowo[ci w powy|szym kodzie jest zatrzymanie akcji w celu wyczyszczenia kolejki anima- cji, zarówno w obsBudze zdarzenia mouseover, jak i mouseout. Nastpnie animujemy wysoko[ elementu w celu wy[wietlenia ukrytych ikon lub zmniejszamy j w celu ich ukrycia. Precyzyjnie dobrane ustawienia czasu trwania animacji i jej dynamiki pozwalaj uzyska ciekawy efekt podskaki- wania, o który nam chodziBo. W tym przypadku równie| zachcamy do eksperymentów z ró|ny- mi ustawieniami i dostosowania efektu do wBasnych potrzeb. rozdzial_03/10_animated_navigation_2/script.js (fragment) $('#nav_stretch li').hover( function() { $(this) .stop(true) .animate( {height: '60px'}, {duration: 500, easing: 'easeOutBounce'} ) }, function() { $(this) Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 71 .stop(true) .animate( {height:'20px'}, {duration: 500, easing: 'easeOutCirc'} ) } ); I w ten sposób mamy nie jeden, a dwa niezBe przykBady efektów, które mo|emy pokaza klientowi. Biblioteka jQuery UI Jak wspomnieli[my w rozdziale 1., biblioteka jQuery UI jest kolekcj zaawansowanych wid|etów i interakcji, stworzonych z u|yciem jQuery. Znajdziemy tu kontrolki wyboru daty, akordeony i obsBu- g zdarzeD typu  przecignij i upu[ . Tego typu elementy staj si coraz popularniejsze w aplika- cjach WWW. Zanim jednak zaczniemy cieszy si nowymi zabawkami, musimy zdoby bibliotek jQuery UI. Ten proces jest nieco bardziej skomplikowany w porównaniu z podstawow bibliote- k jQuery i wtyczkami, których u|ywali[my dotychczas. KBopot wynika z faktu, |e peBna wersja biblioteki jQuery UI wa|y niemal 500 kB (300 kB po zminimalizowaniu)! To du|o. Na szcz[cie wikszo[ projektów wykorzystuje zaledwie uBamek mo|liwo[ci caBej biblioteki. Z tego powodu na stronie projektu jQuery dostpne jest narzdzie pozwalajce stworzy wBasn, dopasowan do potrzeb wersj jQuery UI, to znaczy tak, która zawiera tylko potrzebne nam elementy i nic wicej. Opcje konfiguratora wBasnej wersji jQuery UI7 mog na pierwszy rzut oka wyda si nieco przy- tBaczajce, ale nie nale|y si zra|a. Narzdzie konfiguracyjne skBada si z kilku sekcji: Core, Interaction, Widgets, Effects i Themes. Sekcja Core dotyczy gBównej cz[ci biblioteki jQuery UI, na niej swoje dziaBanie opieraj komponenty z sekcji Widgets i Interaction. Dobre podej[cie polega na odznaczeniu wszystkiego, a nastpnie zaznaczeniu tylko tego, co niezbdne. Je[li dany element wymaga zainstalowania innego, ten drugi zostanie zaznaczony automatycznie. Na etapie tworzenia aplikacji warto zaopatrzy si w peBn wersj. W ten sposób bdziemy mieli wszystko pod rk, na wszelki wypadek. Po zakoDczeniu tworzenia aplikacji mo|na wróci na stron konfiguratora i stworzy bibliotek w wersji produkcyjnej, zawierajc tylko to, co niezbdne. Ró|nica w rozmiarze midzy wersj peBn a dostosowan mo|e by spora, co demonstruje rysunek 3.5. Jedn z opcji, która ma du|y wpByw na wygld wid|eów i interakcji, jest motyw (ang. theme). Do dys- pozycji mamy spor liczb gotowych motywów, które wybiera si z listy rozwijanej. W rozdziale 9. zajmiemy si bardziej szczegóBowo motywami, poka|emy te|, jak tworzy wBasne. Na razie jednak, nie chcc psu niezBego tempa, u|yjemy domy[lnego motywu i wracamy do pracy. Archiwum utworzone przez konfigurator, dostosowane do wersji jQuery UI zawiera spor liczb pli- ków. Znajdziemy tam mnóstwo kodu demonstracyjnego i dokumentacji. Warto poszpera w katalogu development-bundle, ale niecierpliwych zainteresuje tylko plik jQuery-ui-1.7.2-min.js (numer wersji jest oczywi[cie odpowiedni dla aktualnie najnowszej wersji stabilnej) oraz katalog wybranego motywu. 7 http://jqueryui.com/ Pole ksi|k Kup ksi|k 72 jQuery. Od nowicjusza do wojownika ninja Rysunek 3.5. Porównanie pe nej wersji biblioteki jQuery UI z wersj dostosowan Katalog motywu nale|y umie[ci w lokalizacji dostpnej z poziomu kodu HTML. W przykBadach z tej ksi|ki jQuery UI umie[cili[my w katalogu lib (obok biblioteki jQuery), a pliki motywu w katalogu css. Biblioteka jQuery UI zawiera pakiet Effects, który pozwala implementowa interesujce efekty. Zawiera te| dodatkowe metody i funkcje pomocne w tworzeniu zaawansowanych animacji. Cz[ z tych mo|liwo[ci mieli[my okazj pozna dziki wtyczkom Color Animations oraz Easing. Obie te wtyczki s zawarte w pakiecie Effects, zatem nie musimy ju| nic wBcza indywidualnie, je[li planujemy u|ywa biblioteki efektów wchodzcej w skBad jQuery UI. Zanim przejdziemy do dalszych zagadnieD, rzumy okiem na dostpne efekty. Znów pomczymy nasz pierwszy akapit na stronie i potrz[niemy nim nieco, pod[wietlimy go na |óBto, a na koDcu wysadzimy, rozpryskujc na kawaBki: rozdzial_03/11_jquery_ui_effects/script.js (fragment) $('p:first') .effect('shake', {times:3}, 300) .effect('highlight', {}, 3000) .hide('explode', {}, 1000); Robi wra|enie! A to oczywi[cie zaledwie przedsmak mo|liwo[ci dostpnych efektów. Niektórych z nich mo|na u|ywa tylko w taki sposób jak w powy|szym przykBadzie, inne stanowi uzupeBnienie standardowych parametrów animacji: hide (ukrywania), show (wy[wietlania) lub toggle (przeB- czania widoczno[ci). PrzykBadem tej drugiej grupy s parametry: blind, clip, puff, fold i slide. Nie bdziemy ich wszystkich analizowa, najlepiej, je[li spdzisz niedzielne popoBudnie na ich wypróbowaniu. Nie wszystkie efekty s brawurowe, ale wiele z nich sprawia wra|enie przydat- nych w codziennych zastosowaniach, jak highlight, który jest standardowym sposobem ozna- czania na przykBad nowych wiadomo[ci u|ytkownika. Dobrym pomysBem jest samodzielne przetestowanie wszystkich efektów, |eby pamita o nich wówczas, gdy oka| si przydatne. A je[li asortyment efektów dostpny z jQuery UI to dla Ciebie za maBo, setki innych czekaj w repozytorium wtyczek jQuery! Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 73 Daj si poruszy ! Rozumiesz ju| podstawy tworzenia animacji z jQuery: selektory, funkcje obsBugi zdarzeD, funkcje zwrotne, BaDcuchy metod i  najwa|niejsz z nich  metod animate(). ZapoznaBe[ si te| po- krótce z rozbudowan bibliotek jQuery UI. Najlepszy sposób opanowania tych umiejtno[ci po- lega na wykorzystaniu ich w praktyce. Zatem idz i wykonuj animacje na wszystkim, co Ci wpadnie w oko. Spróbuj pobawi si z ka|d wBa[ciwo[ci ka|dego elementu na ka|dej stronie, a| poczu- jesz, |e rzeczywi[cie staBy si posBuszne Twojej woli. Zanim przejdziemy od animacji do innych zaawansowanych mechanizmów zwizanych z jQuery, zwrócimy uwag na przewijanie i zmian rozmiaru elementów. Te zagadnienia s nieco miej efektow- ne od animacji, ale stanowi istotne elementy obsBugi interfejsu u|ytkownika. Pomog te| utrwali podstawowe pojcia zwizane z jQuery: metody i Bczenie ich w BaDcuchy. Na co jeszcze czekamy? Przewijanie Przewijanie jest zagadnieniem zbli|onym do animacji, poniewa| w tym przypadku elementy równie| poruszaj si na ekranie. W przeciwieDstwie do animacji to jednak u|ytkownik kontro- luje przebieg tej operacji. Istnieje mnóstwo sposobów dostosowania tego typu interakcji do wBasnych potrzeb. W tym punkcie przyjrzymy si menu, które zachowuje swoje poBo|enie nawet mimo przewinicia strony przez u|ytkownika, tworzeniem motywów pasków przewijania oraz sposobom zastosowania technik animacyjnych w zagadnieniach zwizanych z przewijaniem dokumentu. Zdarzenie przewijania Zanim bdziemy w stanie udoskonali mechanizm przewijania, musimy wiedzie, kiedy ono nast- puje. Jak si okazuje, istnieje zdarzenie zwizane z przewijaniem. Zdarzenie to nazywa si scroll i jest odpalane w przypadku zmiany pozycji przewijania elementu, który ma tak wBa[ciwo[, jak okno lub div z obsBug przewijania. Je[li zatem u|ytkownik przewija stron, odpalane jest zdarze- nie, które mo|emy przechwyci i obsBu|y. W celu przechwycenia zdarzenia przewijania musimy podpi si do elementu przewijanego  najcz[ciej jest to element okna window. Okno jest obiektem JavaScript, zatem przed jego wyko- rzystaniem musimy przeksztaBci je na element jQuery, u|ywajc selektora. Oczywi[cie w celu obsBugi zdarzenia przewijania musimy mie obszar z paskami przewijania. Mamy kilka pomysBów na obsBug zdarzeD przewijania, które mog spodoba si klientowi, ale w celu nauczenia si, jak dziaBaj zdarzenia przewijania, zasymulujemy [rodowisko przewijania w jednym z elementów div na stronie. W tym celu w arkuszu stylów CSS nale|y ustawi wBa[ciwo[ overflow: scroll: rozdzial_03/12_scroll_event/scroll.css (fragment) #news { height: 100px; width: 300px; overflow: scroll; } Pole ksi|k Kup ksi|k 74 jQuery. Od nowicjusza do wojownika ninja Powy|szy kod przeksztaBci sekcj wiadomo[ci w mniejszy panel z paskiem przewijania. Teraz przechwycimy zdarzenie przewijania scroll i w jego efekcie wy[wietlimy dowolny tekst. rozdzial_03/12_scroll_event/script.js (fragment) $('#news').scroll(function() { $('#header') .append('<span class="scrolled">Przewijanie!</span>'); }); Przy ka|dej próbie przewijania sekcji wiadomo[ci u góry strony na czerwonym tle pojawi si tekst:  Przewijanie! . Niezbyt to eleganckie, ale skutecznie demonstruje mo|liwo[ci kodu. Spróbuj przewija na ró|ne sposoby: przecigajc mysz lub klikajc pasek przewijania, u|ywajc kóBka myszy czy te| klawiszy strzaBek po klikniciu wewntrz przewijanego obszaru. We wszystkich tych przypadkach jest odpalane zdarzenie przewijania. P ywaj ca nawigacja Wiemy ju|, kiedy u|ytkownik przewija okno. W jaki sposób mo|emy u|y tej informacji w celu udoskonalenia strony? Jednym z czsto stosowanych przykBadów jest pBywajcy panel nawigacyjny. Chodzi o taki sposób prezentowania menu nawigacyjnego, w którym jest ono wy[wietlane w sta- Bym miejscu okna przegldarki, niezale|nie od tego, w którym miejscu przewijanego dokumentu w danej chwili si znajdujemy. Tego typu nawigacja zachowuje si tak, jakby menu pod|aBo za u|ytkownikiem niezale|nie od tego, jak przewija dokument. Dziki obsBudze zdarzenia scroll ten efekt jest Batwy do uzyskania: wystarczy, |e odczytamy wzgldne poBo|enie strony, po czym przenie- siemy nawigacj w to miejsce. W pierwszym kroku musimy przygotowa CSS do obsBugi pBywajcej nawigacji. Do naszego ele- mentu o atrybucie id równym navigation dodamy deklaracj position: relative;, dziki czemu bdziemy mogli przemieszcza go wzgldem dokumentu, modyfikujc wBa[ciwo[ top. Na potrzeby tego wiczenia ustawili[my bardzo du| warto[ wBa[ciwo[ci height  po to, by uzyska pasek przewijania (chyba |e kto[ ma monitor o bardzo wysokiej rozdzielczo[ci). rozdzial_03/13_floating_nav_1/scroll.css (fragment) #navigation { position: relative; } #content { height: 2000px; } Teraz mo|emy zaj si nasz pBywajc nawigacj. Na pierwszy rzut oka zadanie mo|e si wyda banalnie proste: wystarczy odpowiednio zareagowa na zdarzenie przewijania, ustawiajc warto[ top elementu nawigacji: rozdzial_03/13_floating_nav_1/script.js (fragment) $(window).scroll(function() { $('#navigation').css('top', $(document).scrollTop()); }); Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 75 Przetestuj ten kod w przegldarce. Zauwa|ysz, |e cel zostaB osignity: po przewiniciu strony pa- nel nawigacyjny zostaje przeniesiony we wBa[ciwe miejsce. Skd wie, gdzie ma si ustawi? Zapy- tali[my o to za pomoc metody scrollTop(). Metoda ta zwraca poBo|enie przewijanego elementu, w tym przypadku caBego dokumentu: $(document).scrollTop(). To jest pozycja lewego górnego wierzchoBka okna przegldarki wzgldem dokumentu. Oczywi[cie wszystko dziaBa, ale jest to niezbyt eleganckie: menu gwaBtownie  skacze na wBa[ciwe miejsce, przez co prezentuje si maBo atrakcyjnie. Powód tego stanu rzeczy powinien by oczywi- sty, je[li uwa|nie przeanalizowaBe[ pierwszy przykBad obsBugi zdarzenia przewijania: przy ka|dej próbie przewinicia okna przegldarka odpala mnóstwo zdarzeD przewijania. Ka|de z nich zmu- sza menu do zmiany pozycji, dlatego nie ma co si dziwi, |e nie dziaBa to pBynnie. Wiemy ju|, w jaki sposób powstrzyma animacje przed kolejkowaniem (patrz punkt  Animowa- na nawigacja ): sBu|y do tego metoda stop(). To pozwoli nam opanowa szarpanie, ale nasz efekt nadal jest daleki od doskonaBo[ci. Mo|e warto by wzbogaci go animacj z odrobin eleganckiej dynamiki? Zrobimy to w nastpujcy sposób: rozdzial_03/14_floating_nav_2/script.js (fragment) $(window).scroll(function() { $('#navigation') .stop() .animate({top: $(document).scrollTop()},'slow','easeOutBack'); }); Ró|nica jest ogromna, a zostaBa uzyskana za pomoc tak niewielkiej ilo[ci kodu! Przewijanie dokumentu Gdy na jednej stronie znajduje si du|a liczba informacji, czsto stosuje si zbiór odno[ników wewntrznych umieszczonych na pocztku dokumentu. Te odno[niki przenosz u|ytkownika do odpowiedniego miejsca dokumentu. W punkcie doce- lowym czsto umieszcza si odno[nik przenoszcy na pocztek dokumentu, |eby u|ytkownik mógB wybra inn pozycj z menu. Dodajmy taki mechanizm na naszej stronie. Na pocztek do stopki dokumentu dodamy odno[nik przenoszcy na gór strony. W tym celu wystarczy ustawi adres odno[nika (atrybut href) na warto[ #. Chcieliby[my, |eby w efekcie kliknicia odno[nika strona pBynnie przewinBa si na pocztek. Do tego sBu|y atrybut scrollTop, który podamy metodzie animate(). Chcemy te| anulowa domy[lne dziaBanie odno[nika, w przeciwnym razie przegldarka przeniesie u|ytkownika na pocztek stro- ny, zanim zd|ymy wykona animacj. Je[li stawiasz w jzyku JavaScript pierwsze kroki, zdra- dzimy Ci, jak to zrobi: ka|da funkcja obsBugi zdarzenia (w tym kliknicia przycisku) mo|e zwró- ci warto[ false, co spowoduje anulowanie oryginalnego dziaBania zwizanego ze zdarzeniem: $('a[href=#]').click(function() { $('html').animate({scrollTop: 0},'slow'); return false; // Zwrócenie false anuluje domy[lne dziaBanie zwizane z klikniciem } Pole ksi|k Kup ksi|k 76 jQuery. Od nowicjusza do wojownika ninja W powy|szym kodzie znajdziemy obsBug nowego typu selektora: selektora atrybutu. Warunek zwizany z atrybutem umieszcza si w nawiasach kwadratowych ([]), co pozwala ograniczy se- lektor do elementów, których wybrane atrybuty speBniaj pewne warunki. W naszym przykBadzie szukamy tylko takich elementów a, których atrybut href ma warto[ #. Ten kod dziaBa i jest do[ czytelny oraz prosty, ale niestety ma pewn subteln wad. Je[li prze- gldarka u|ytkownika dziaBa w trybie quirks, selektor $('html') nie bdzie dziaBaB. Je[li nie wiesz, co to jest tryb quirks, przeczytaj podrcznik do CSS w serwisie SitePoint8. Strony WWW powin- no si tworzy w taki sposób, aby przegldarka dziaBaBa w trybie standardowym, ale czasem zda- rza si potrzeba pracy ze starym kodem, w przypadku którego nie mo|emy sobie pozwoli na taki luksus. Aby powy|szy kod zadziaBaB w trybie quirks, musimy u|y selektora $('body'). Mo|emy równie| u|y selektora $('html, body'), co pozwala si upewni, |e kod zadziaBa w ka|dym z trybów pracy przegldarki. Niestety, to ostatnie rozwizanie sprawia problemy w niektórych wer- sjach przegldarki Opera, która (zgodne z logik) próbuje w tym samym momencie przewin obydwa elementy. Masz prawo si oburzy:  Przecie| jQuery miaBo rozwizywa problemy niekompatybilno[ci przegldarek! . W rzeczywisto[ci to prawda w wikszo[ci przypadków. Ten jednak jest nieco subtelniejszy i nie zostaB rozwizany w podstawowej wersji jQuery. Na szcz[cie problem jest do[ prosty do obej[cia. Co wicej, kto[ ju| o to zadbaB i zaimplementowaB rozwizanie (dodajc gratis mnóstwo ciekawych funkcji zwizanych z przewijaniem) w postaci wtyczki ScrollTo. Wtyczka ScrollTo, dostpna w repozytorium wtyczek9, zawiera mechanizmy sBu|ce do przewija- nia dokumentu i elementów. Znajdziemy w niej narzdzia w zupeBno[ci wystarczajce do realiza- cji wszelkich potrzeb zwizanych z przewijaniem, jakie napotkali[my do tej pory. Po pobraniu i zaimportowaniu wtyczki mo|emy poprawi nasz funkcj obsBugi kliknicia odno- [nika w sposób niewra|liwy na bBdy w ró|nych wersjach przegldarek: rozdzial_03/15_page_scroll/script.js (fragment) $('a[href=#]').click(function() { $.scrollTo(0,'slow'); return false; }); Powy|sza skBadnia zapewne wyglda nieco dziwnie, poniewa| wywoBujemy metod scrollTo bezpo[rednio z aliasu funkcji jQuery(). Wtyczka dziaBa w sposób inteligentny i wie, |e w takim wywoBaniu ma przewin caBy dokument. Je[li chcemy przewin jeden z elementów dokumentu, zastosujemy tradycyjne wywoBanie z selektorem: $('div#scrolly').scrollTo(0, 'slow'). Wtyczka ScrollTo ma mnóstwo opcji, a jej dziaBanie nie ogranicza si do przewijania obiektów o warto[ci bezwzgldne. Mo|na przekaza warto[ wzgldn (np. +=50px), element DOM (strona 8 http://reference.sitepoint.com/css/doctypesniffing 9 http://plugins.jquery.com/project/ScrollTo Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 77 zostanie przewinita do tego elementu), selektor, literaB obiektu definiujcy wspóBrzdne x i y lub sBowo kluczowe max, co spowoduje przewinicie dokumentu do koDca. Przewija mo|na w po- ziomie i w pionie, dostpne s te| opcje pozwalajce precyzyjnie dostosowa miejsce docelowe. Informacje na temat wszystkich dostpnych opcji mo|na znalez na stronie domowej wyczki10. Modyfikacja paska przewijania Klient nerwowym krokiem zbli|a si do Twojego biurka i ze zmartwion min pokazuje  abso- lutnie ostateczny , zatwierdzony podpisami projekt strony.  Ale te paski przewijania nie bd tak wyglda, prawda? Znaczy, one s takie szare i brzydko wygldaj . Z reguBy od rozpoczcia projektu mija niewiele czasu, gdy klient prosi o zmian systemowych pa- sków przewijania na niestandardowe, szczególnie je[li chodzi o elementy wewntrzne, jak prze- wijane panele div. Takie zlecenie wydaje si do[ dobrze uzasadnione, ale nale|y zda sobie spra- w z pewnych implikacji zwizanych z u|yteczno[ci strony. U|ytkownicy stron WWW maj pewne nawyki, przyzwyczajenia, które uBatwiaj im korzystanie z interfejsu. Niestandardowe implementacje mog wprowadzi zamieszanie, szczególnie je[li dziaBaj inaczej od standardowych elementów, które zastpuj. Ignorowanie przyzwyczajeD u|ytkowników mo|e prowadzi do ich frustracji, dlatego tego typu modyfikacje elementów interfejsu u|ytkow- nika nale|y przeprowadza ze szczególn ostro|no[ci. Mimo to warto mie [wiadomo[, |e celnie zmodyfikowany element interfejsu mo|e sta si klu- czowym elementem wyró|niajcym stron w[ród konkurencji. Z tego powodu zawsze nale|y rozwa- |y wady i zalety takich modyfikacji z punktu widzenia u|ytkownika koDcowego. W naszym przypadku: klient nasz pan. Robimy! Nie ma jednak potrzeby budowania paska przewijania od zera: tego typu elementy interfejsu s skomplikowane w konstrukcji, a klient nie bdzie szcz[liwy, gdy oka|e si, |e dBugie godziny po- [wicone na tworzenie paska przewijania poszBy na marne, bo co[ nie dziaBa, jak nale|y. Szczegól- nie je[li do dyspozycji mamy doskonaB wtyczk, która realizuje to zadanie: jScrollPane. Wtyczka jScrollPane sBu|y do implementowania niestandardowych pasków przewijania, które mo|na umie[ci w dowolnym elemencie o rozmiarze przekraczajcym rozmiar kontenera. Wtyczk t mo|na znalez w domy[lnym repozytorium jQuery, ale jej bardziej aktualna wersja jest dostpna do pobrania w serwisie Google Code11. Do poprawnego dziaBania wtyczki niezbdne s dwa pliki: kod JavaScript zapisany w pliku jScrollPane-1.2.3.min.js oraz pliku CSS jScrollPane.css. Plik CSS definiuje domy[lne style pasków i stanowi dobry punkt wyj[cia do implementacji wBasnego stylu. Wystarczy rozszerzy lub zmo- dyfikowa te style, zmieniajc kolory i grafiki, |eby w prosty sposób stworzy wBasny motyw wi- zualny. W naszych przykBadach wykorzystamy domy[lne style: estetyczny szary kolor, który pa- suje do wikszo[ci stron WWW (co wida na rysunku 3.6). 10 http://flesler.blogspot.com/2007/10/jqueryscrollto.html 11 http://code.google.com/p/jscrollpane/ Pole ksi|k Kup ksi|k 78 jQuery. Od nowicjusza do wojownika ninja Rysunek 3.6. Zmodyfikowany pasek przewijania Zmodyfikowane paski przewijania mo|na ustawi w dowolnym elemencie strony, wystarczy wywoBa na jego selektorze metod jScrollPane(). Parametry w tej metodzie s opcjonalne, ale mamy ich do dyspozycji kilkana[cie. SBu| one do definiowania strzaBek paska przewijania czy do ustawia- nia paska po lewej lub prawej stronie panelu. PeBn list parametrów mo|na znalez na stronie WWW wtyczki12. W naszym przykBadzie ustawimy margines midzy zawarto[ci a paskiem przewijania, szeroko[ paska i ukryjemy górn oraz doln strzaBk. rozdzial_03/16_custom_scrollbar/script.js (fragment) $('#fine_print').jScrollPane({ scrollbarWidth: 10, scrollbarMargin: 10, showArrows: false }); Nasz nowy pasek przewijania wyglda i dziaBa doskonale, ale Batwo zauwa|y, |e nie obsBuguje przewijania za pomoc rolki myszy. To celowy zabieg, obsBuga rolki zostaBa pominita w jQuery w celu ograniczenia rozmiaru biblioteki. Istnieje wtyczka, która uzupeBnia ten brak13, a biblioteka jScrollPane zostaBa napisana z my[l o tej wtyczce. Dziki temu do obsBugi rolki wystarczy zaim- portowa wtyczk obsBugi rolki, a jScrollPane wykryje to automatycznie i bdzie obsBugiwa rolk do przewijania paneli. Zmiana rozmiaru Zmiana rozmiaru mo|e dotyczy wielu ró|nych zagadnieD. Pierwsza rzecz, jaka przychodzi do gBowy, to zmiana rozmiaru okna przegldarki (efekt, który czsto sprawia problemy programi- stom stron WWW). Czsto stosuje si te| zmian rozmiaru okien wewntrz aplikacji oraz zmian rozmiarów ilustracji lub innych elementów. Biblioteka jQuery obsBuguje mechanizm gromadzenia informacji o zmianie rozmiaru okna w wyniku interakcji z u|ytkownikiem, a dziki jQuery UI mamy mo|liwo[ wpBywania na rozmiary dowol- nych elementów na stronie. Wypróbujmy to! 12 http://www.kelvinluck.com/assets/jquery/jScrollPane/jScrollPane.html 13 http://plugins.jquery.com/project/mousewheel Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 79 Zdarzenie zmiany rozmiarów Zdarzenie resize jest zaimplementowane w podstawowej bibliotece jQuery. Jest odpalane po zmianie rozmiaru okna dokumentu. Istnieje kilka powodów, dla których powinni[my obsBugiwa to zdarzenie. Zanim zajmiemy si praktycznym przykBadem, zobaczmy, jak ono dziaBa: rozdzial_03/17_resize_event/script.js (fragment) $(window).resize(function() { alert("Zmieni e rozmiar okna!"); }); Otwórz plik index.html w przegldarce i spróbuj zmieni rozmiar okna. Za ka|dym razem zosta- nie wy[wietlony komunikat. Wyprowadzanie u|ytkowników z równowagi przy ka|dej próbie zmiany rozmiarów okna przegldarki z pewno[ci nie przyczyni si do zwycistwa w konkursie na najbardziej przyjazn u|ytkownikom aplikacj WWW, zatem spróbujmy wykorzysta to zda- rzenie do czego[ bardziej praktycznego. Prze czanie uk adu Je[li pracowaBe[ ze stylami CSS przez jaki[ czas, z pewno[ci zdajesz sobie spraw, |e trwa nie- cichnca debata na temat tego, co jest lepsze: pBywajce czy sztywne ukBady. Z jednej strony, pBywajce ukBady wykorzystuj ekran w maksymalnym stopniu, niezale|nie od rozmiarów okna przegldar- ki, z drugiej strony, ukBady sztywne pozwalaj na tworzenie precyzyjnych projektów graficznych, wypozycjonowanych co do piksela, które nie bd si rozje|d|aBy niezale|nie od rozmiaru okna. W przypadku serwisu StarTrackr! mo|emy zaoferowa co[ po[redniego: zaprojektowa dwa osobne sztywne ukBady i przeBcza si midzy nimi w zale|no[ci od rozmiarów okna. Zaczynamy! Domy[lna strona StarTrackr!, z któr pracowali[my dotychczas, ma skromne 650 pikseli szeroko[ci. Naszym pierwszy zadaniem bdzie napisanie stylów, które bd u|ywane w przypadku, gdy okno bdzie miaBo szeroko[ co najmniej 850 pikseli: rozdzial_03/18_layout_switcher/wide.css body #container { width: 850px; } body #container p { width: 650px; } body #header { background-image: url('../../css/images/header-corners-wide.png'); } body #celebs table { width: 650px; margin-left: 5px; } Warto zwróci uwag na to, |e na pocztku ka|dej reguBy zastosowali[my pozornie zbdn deklaracj body. Chodzi jednak o to, |e dziki bardziej specyficznej deklaracji selektora CSS te reguBy bd miaBy pierwszeDstwo nad bardziej ogólnymi reguBami zdefiniowanymi w podstawowym arkuszu stylów. Pole ksi|k Kup ksi|k 80 jQuery. Od nowicjusza do wojownika ninja W nastpnym kroku musimy napisa kod jQuery, który doda lub usunie nasz arkusz stylów. Wy- starczy sprawdzi, czy element body ma szeroko[ wiksz ni| 900px, a je[li tak  dopisa arkusz stylów do elementu head lub usun go (w przeciwnym razie). rozdzial_03/18_layout_switcher/script.js (fragment) if ($('body').width() > 900) { $('<link rel="stylesheet" href="wide.css" type="text/css" />') .appendTo('head'); } else { $('link[href=wide.css]').remove(); } Tutaj jednak natrafiamy na pewien problem. Ten kod musi by wywoBany w obsBudze dwóch zdarzeD: po zaBadowaniu strony i po zmianie rozmiarów okna. Kuszca mo|e wyda si opcja skopiowania identycznego kodu w dwa miejsca i pozbycia si problemu. Oprzyj si tej pokusie! Kopiowanie kodu to zawsze zBy pomysB. Wyobraz sobie, |e po kilku miesicach oka|e si, |e 900 pikseli to zBa warto[ graniczna i ukBad nale|y przeBcza na granicy 1000 pikseli. Odszukujesz kod, zmieniasz warto[ i przeBadowujesz stron. Wszystko wydaje si w porzdku, ale tak nie jest, bo poprawiBe[ kod tylko dla metody obsBugi zdarzenia document-ready, a zapo- mniaBe[, |e identyczny kawaBek kodu znajduje si w obsBudze zdarzenia resize dokumentu. Tego typu problem jest bardzo prawdopodobny  im bardziej skomplikowany staje si kod, tym wiksze ryzyko i tym trudniej wykry, gdzie tkwi przyczyna bBdu. Na szcz[cie prawie ka|dy jzyk programowania obsBuguje mechanizmy pomocne w tego typu sytuacjach i JavaScript (a dziki temu jQuery) nie jest tu wyjtkiem. Dotychczas do obsBugi zda- rzeD wykorzystywali[my funkcje anonimowe, ale tym razem stworzymy funkcj nazwan: rozdzial_03/18_layout_switcher/script.js (fragment) $(document).ready(function() { stylesheetToggle(); $(window).resize(stylesheetToggle); }); function stylesheetToggle() { if ($('body').width() > 900) { $('<link rel="stylesheet" href="wide.css" type="text/css" />') .appendTo('head'); } else { $('link[href=wide.css]').remove(); } } Naszej funkcji nadali[my nazw stylesheetToggle i wykorzystujemy j dwukrotnie: raz w obsBu- dze zdarzenia zaBadowania dokumentu i raz w obsBudze zmiany rozmiaru. Nale|y zwróci uwag na to, |e w deklaracji obsBugi zdarzenia wystarczy przekaza nazw funkcji: w tym przypadku nie deklarujemy kodu funkcji, nie nale|y zatem u|ywa sBowa kluczowego function ani znaków nawiasów klamrowych czy okrgBych. Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 81 Elementy obs uguj ce zmian rozmiaru Biblioteka jQuery UI zawiera wtyczk Resizable, która wchodzi w skBad grupy wtyczek zwiza- nych z interakcj. Wtyczka ta umo|liwia dodanie uchwytu zmiany wymiarów do elementów (prawy dolny wierzchoBek). Dziki temu uchwytowi u|ytkownik mo|e rozciga i zmniejsza elementy za pomoc myszy (tak samo jak okna systemu operacyjnego). Jak wikszo[ elementów wchodzcych w skBad jQuery UI, wtyczka Resizable pozwala na szeroki zakres konfiguracji i jest prosta w u|yciu. Je[li wykorzystaBe[ peBn wersj jQuery UI, mo|liwo[ci wtyczki Resizable s go- towe do u|ycia. Je[li nie, wró do konfiguratora wBasnej wersji jQuery UI i wybierz element Resizable. Do dziaBania wtyczka ta potrzebuje tylko biblioteki podstawowej i motywu. U|ycie wtyczki Resizable w podstawowej formie jest bardzo proste. Po prostu wystarczy wykona metod resizable() na odpowiednim selektorze: rozdzial_03/19_resizable_elements/script.js (fragment) $('p').resizable(); Je[li wykonamy ten kod w naszym serwisie StarTrackr!, uzyskamy do[ niezwykBy efekt: mo|na zmienia rozmiar ka|dego akapitu na stronie! Wyglda to do[ ciekawie: caBa strona staBa si bardzo plastyczna. W domy[lnym wywoBaniu wtyczka Resizable dodaje do obiektów uchwyty w prawym dolnym wierzchoBku. Styl tych uchwytów jest dopasowany do aktualnego motywu jQuery UI, zatem je[li chcesz zmieni ten wy- gld, wybierz odpowiedni motyw. Domy[lny wygld uchwytów zmiany rozmiaru jest przedsta- wiony na rysunku 3.7. Rysunek 3.7. Akapity z mo liwo ci zmiany rozmiaru Przyjrzyjmy si prostej sytuacji, w której ta funkcja bardzo si przydaje: zmianie rozmiaru pól textarea. Pole ksi|k Kup ksi|k 82 jQuery. Od nowicjusza do wojownika ninja Pole textarea z mo liwo ci zmiany rozmiaru Czasem ch stworzenia u|ytecznego interfejsu stoi w sprzeczno[ci z potrzeb piknego i zrównowa- |onego projektu graficznego. Dziki jQuery mo|emy zaj si równie| tym problemem i nieco usprawni aplikacj na polu u|yteczno[ci. Jednym z obszarów, w których forma i funkcjonalno[ czsto si [cieraj, s formularze HTML. Jednym z powodów tego stanu rzeczy jest to, |e u|ytkownicy strony WWW maj czsto odmienne wymagania. ZaBó|my na przykBad, |e udostpniamy pole tekstowe (textarea) w formularzu opinii o stronie. Niektórzy u|ytkownicy nie napisz nic, inni niewiele, a jeszcze inni napisz bardzo du|o. Aby zachowa elegancki ukBad formularza, mo|na nada niewielkie pocztkowe wymiary polu tek- stowemu i da u|ytkownikowi mo|liwo[ powikszenia go w razie potrzeby. Dziki temu u|ytkownik, który lubi du|o pisa, bdzie miaB wra|enie, |e zachcamy go do wypowiedzi. Oto sposób, w jaki mo|emy zrealizowa to zadanie za pomoc wtyczki Resizable wchodzcej w skBad jQuery UI: rozdzial_03/20_resizable_textarea/script.js (fragment) $('textarea').resizable({ grid : [20, 20], minWidth : 153, minHeight : 30, maxHeight : 220, containment: 'parent' }); Powy|szy kod powoduje, |e pola tekstowe textarea pozwalaj zmienia swoje wymiary, tak samo jak w poprzednim przykBadzie nasze akapity. Efekt jest pokazany na rysunku 3.8. W celu udosko- nalenia dziaBania efektu oraz zademonstrowania elastyczno[ci wtyczki zastosowali[my dodatkowe parametry. Do dyspozycji mamy mnóstwo opcji konfiguracyjnych, z którymi mo|na si zapozna w dokumentacji na stronie jQuery UI14. Rysunek 3.8. Pole textarea z opcj zmiany rozmiaru W opcjach zdefiniowali[my midzy innymi zakres mo|liwo[ci rozcigania elementu: sBu| do te- go wBa[ciwo[ci minHeight, minWidth i maxHeight. Aatwo zauwa|y, |e pominli[my wBa[ciwo[ maxWidth, zamiast niej zastosowali[my parametr containment: sBu|y on do okre[lenia kontenera, który bdzie ograniczaB rozmiary elementu. Jako warto[ci tej wBa[ciwo[ci mo|na u|y selektora jQuery albo specjalnej warto[ci parent, która spowoduje automatyczne wybranie rodzica elementu. 14 http://docs.jquery.com/UI/API/1.7/Resizable Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 83 Dodatkowo zastosowali[my atrybut grid, który okre[la skok zmiany rozmiaru. Uwa|amy, |e taka opcja daje ciekawe wra|enie w zakresie integracji zmiany rozmiaru elementu. Parametr grid okre[la si w postaci listy dwuelementowej: rozmiar w poziomie i w pionie. Jeszcze jeden parametr wymaga uwagi. Chodzi o handles. Parametr ten pozwala okre[li wierz- choBki, w których zostan umieszczone uchwyty zmiany rozmiaru, a w efekcie wskazuje mo|liwy kierunek tej zmiany. Parametr handles akceptuje nastpujce warto[ci: n, e, s, w, ne, se, sw, nw i all. Mo|na zastosowa dowoln ich liczb, rozdzielajc je przecinkiem  na przykBad { handles : 'n', 'se'} doda uchwyty na górnej krawdzi oraz w prawym dolnym wierzchoBku. Tego typu elementy s czsto stosowane w formularzach, w których mo|na wprowadza ró|n ilo[ tekstu. Podzia panelu Mimo |e zadbali[my o wBa[ciwe wy[wietlanie notki prawnej, adwokat klienta nadal martwi si o to, |e mo|e on ponie[ konsekwencje niewBa[ciwego wyeksponowania regulaminu u|ytkowania serwi- su. Z punktu widzenia u|yteczno[ci problem polega na tym, |e regulamin to bardzo dBugi doku- ment podzielony na podsekcje. Niemniej musimy go zaprezentowa na stronie gBównej. By mo|e podziaB panelu pomo|e rozwiza problem. PodziaB panelu to taki element interfejsu, który pozwala u|ytkownikowi zmieni wzajemne pro- porcje jego elementów bez zmiany ich ogólnego wspólnego rozmiaru. Tego typu rozwizania s powszechnie stosowane w aplikacjach typu desktop, ale wraz z rozwojem technologii stron WWW za- czBy zdobywa popularno[ równie| i w aplikacjach internetowych. Prototyp mo|emy zbudowa za pomoc wtyczki Resizable: zasymulujemy kontener zawierajcy w jednym panelu spis tre[ci, a w drugim tre[ regulaminu. Wygld tego wid|etu prezentuje rysunek 3.9. Rysunek 3.9. Pionowy podzia panelu Na razie skupimy si wyBcznie na mechanizmie zmiany rozmiaru. Dynamiczne Badowanie pod- sekcji w panelu z regulaminem zostanie szczegóBowo omówione w rozdziale 5. Nasz dzielony panel bdzie skBadaB si z dwóch elementów div reprezentujcych ka|dy z paneli skBadowych, zagnie|d|onych wewntrz elementu kontenera o staBych wymiarach. Spis tre[ci b- dzie elementem typu blokowego, dziki czemu po zmianie rozmiaru ukBad nam si nie rozjedzie: Pole ksi|k Kup ksi|k 84 jQuery. Od nowicjusza do wojownika ninja rozdzial_03/21_horizontal_pane_splitter/index.html (fragment) <div id="splitter"> <div class="pane" id="tocPane"> <div class="inner"> ... </div> </div> <div class="pane" id="contentPane"> <div class="inner"> ... </div> </div> </div> Teraz dodamy nieco prostych stylów do arkusza splitter.css. Jak wida, wysoko[ kontenera usta- wili[my na sztywno, a ka|dy z elementów podrzdnych bdzie pocztkowo zajmowaB 50% szero- ko[ci. Oczywi[cie proporcje pocztkowe mo|na dowolnie zmieni, je[li uznasz to za stosowne. Je[li chcesz u|y ramki CSS (border), zdefiniuj jej wymiary w pikselach i zadbaj o to, |eby zgadzaBy si one z wymiarami kontenera. rozdzial_03/21_horizontal_pane_splitter/splitter.css #splitter{ height:150px; margin-top:30px; margin-bottom:50px; } #splitter .pane { width:50%; height:100%; float:left; } #splitter h2 { margin-bottom:0; padding-bottom:0; } #tocPane { overflow: hidden; background:#d6dde5 url(handle.png) no-repeat right center; } #tocPane .inner { width: 300px; } #contentPane { overflow: auto; } #contentPane .inner { padding: 0 5px; } Pole ksi|k Kup ksi|k ANIMACJE, PRZEWIJANIE I ZMIANA ROZMIARU 85 Nastpnie stworzymy nasz kod jQuery. Aby zaimplementowa pionowy podziaB panelu, musimy spowodowa, |e pierwszy element bdzie umo|liwiaB zmian rozmiaru z uchwytem po prawej, dziki czemu bdzie go mo|na rozciga tylko w prawo. Je[li uruchomimy ten przykBad wyBcznie z elementem z mo|liwo[ci zmiany rozmiaru, zauwa- |ymy, |e to ju| prawie wszystko. Jedyny problem polega na tym, |e po zmianie rozmiaru lewego panelu szeroko[ prawego pozostaje bez zmian, zamiast dostosowa si do rozmiarów pierwszego, wypeBniajc caB dostpn szeroko[. Aby obsBu|y to wymaganie, musimy wykona pewne obli- czenia w ramach funkcji obsBugi zdarzenia zmiany rozmiaru pierwszego elementu: rozdzial_03/21_horizontal_pane_splitter/script.js (fragment) $('#splitter > div:first').resizable({ handles: 'e', minWidth : '100', maxWidth : '400', resize: function(){ var remainingSpace = $(this).parent().width() - $(this).outerWidth(); var divTwo = $(this).next(); var divTwoWidth = remainingSpace - (divTwo.outerWidth() - divTwo.width()); divTwo.css('width', divTwoWidth + 'px'); } }); Ka|da zmiana rozmiaru lewego panelu spowoduje odpowiedni zmian rozmiaru panelu po prawej. Potrzebujemy tu odrobiny matematyki: bierzemy szeroko[ kontenera (która stanowi caBkowit szeroko[ naszego dwupanelowego wid|etu) i odejmujemy od niej szeroko[ lewego panelu, do czego sBu|y metoda outerWidth(). Metoda ta jest przydatna do sprawdzania caBkowitej szeroko[ci elementu, razem z ramk (border) i wypeBnieniem (padding). Je[li podamy jej opcjonalny parametr true, warto[ zostanie obliczona równie| z marginesem (margin). Jak Batwo si domy- [li, dostpna jest równie| analogiczna metoda outerHeight(), która zwraca wysoko[ elementu. Zmienne w j zyku JavaScript Przeanalizujmy ten wiersz: var remainingSpace = $(this).parent().width() -$(this).outerWidth(); Przypisuje on wynik oblicze nowej zmiennej o nazwie remainingSpace. Od tego miejsca w naszym kodzie mo emy u y nazwy remainingSpace wsz dzie tam, gdzie potrzebujemy podstawi t obliczon warto . Kolejny wiersz jest nast puj cy: var divTwo = $(this).next(); Ten wiersz realizuje podobne zadanie, z t ró nic , e nowo utworzonej zmiennej divTwo przypisujemy obiekt jQuery. Ta zmienna mo e by u ywana w taki sam sposób jak odpowiadaj ca jej selekcja jQuery. U ywanie zmiennych w ten sposób pomaga uzyska wysoki poziom czytelno ci kodu, poniewa ka de wyra enie jest tak krótkie, jak to mo liwe. Dodatkowo kod mo e sta si wydajniejszy, poniewa odczyt warto ci ze zmiennej jest z regu y du o szybszy ni wyliczenie tej warto ci. Pole ksi|k Kup ksi|k 86 jQuery. Od nowicjusza do wojownika ninja Po obliczeniu ilo[ci miejsca pozostaBego po zmianie rozmiaru jeste[my prawie gotowi, aby usta- wi szeroko[ drugiego elementu. Pozostaje jedynie uwzgldni jego ramk i wypeBnienie. Niestety, metoda outerWidth nie pozwala na definiowanie szeroko[ci, a jedynie na jej odczyt, zatem musi- my zrobi to samodzielnie. Aby obliczy, ile z szeroko[ci elementu przypada na jego ramk i wypeBnienie, musimy odj szeroko[ samego elementu (wynik metody width()) od caBkowitej szeroko[ci (wynik metody outerWidth()). Po odjciu tego wyniku otrzymujemy warto[ zmiennej remainingSpace, która informuje nas o tym, ile miejsca zostaBo do wykorzystania. W tym momencie funkcja obsBugi zdarzenia si koD- czy i mamy odpowiednio zaktualizowane wymiary naszego dwupanelowego wid|etu. Gdyby[my zechcieli zaimplementowa podobny wid|et, ale z podziaBem poziomym, musieliby- [my wprowadzi drobn modyfikacj. Nasze elementy s umieszczone jeden nad drugim (a nie obok siebie), a metoda resizable() wymaga zastosowania opcji handles o warto[ci 's' (uchwyt na dolnej krawdzi). Kod obsBugi zdarzenia zmiany wymiarów bdzie niemal identyczny, z t ró|nic, |e zamiast odczytywa i ustawia szeroko[ci elementów, bdziemy u|ywa wysoko[ci: rozdzial_03/22_vertical_pane_splitter/script.js (fragment) $('#splitter > div:first').resizable({ handles: 's', minHeight : '50', maxHeight : '200', resize: function(){ var remainingSpace = $(this).parent().height() - $(this).outerHeight(); var divTwo = $(this).next(); var divTwoHeight = remainingSpace - (divTwo.outerHeight() - divTwo.height()); divTwo.css( 'height', divTwoHeight + 'px' ); } }); Tego typu wid|ety pomimo swojej prostoty mog by bardzo u|yteczne. Wymagaj niewielkiej ilo[ci kodu, ale przydaj si w wielu zastosowaniach. Je[li jednak potrzebujesz bardziej skompli- kowanego mechanizmu, jak wiele paneli z mo|liwo[ci regulacji rozmiarów lub zagnie|d|enia, warto zastosowa gotowe rozwizanie w postaci wtyczki Splitter. W a nie tak si animuje, przewija i zmienia wymiary Co za rozdziaB! Opanowali[my podstawy animacji, przewijania i zmiany rozmiarów elementów, na- uczyli[my si, w jaki sposób mo|na tworzy BaDcuchy metod w jQuery i jak pisa zwarty kod o du|ych mo|liwo[ciach bez utraty jego czytelno[ci. Stopniowo wykorzystujemy nasze umiejtno[ci z za- kresu jQuery do implementowania wspaniaBych efektów. Jednak warto zauwa|y w tym miejscu, |e nie same efekty s istotn wiedz, któr mo|esz uzyska w tej ksi|ce, a koncepcje, które s wyko- rzystane do ich uzyskania. Nawet najbardziej skomplikowane wizualnie efekty mo|na uzyska za pomoc prostych dziaBaD, poBczonych ze sob we wBa[ciwy sposób. To od programisty zale|y, czy zechce usi[ i przemy- [le zadanie, opracowa sposób jego rozwizania i zaimplementowa je w efektowny sposób. Pole ksi|k Kup ksi|k Skorowidz scrollTop, 75 $ timeout, 152 $(document).ready(), 32 title, 147 autouzupeBnianie, 208 A B AJAX, 166 akordeon, 132 biblioteka jQuery, Patrz jQuery akordeon w jQuery UI, 137 biblioteka jQuery User Interface, Patrz jQuery UI akordeony wielopoziomowe, 135 biblioteka Prototype.js, 300 alias $(), 26 blokowanie zdarzeD, 297 alias jQuery, 26 browser sniffing, 19 analiza danych XML, 190 animacje, 50 C czas trwania, duration, 65 dynamika, easing, 60, 65 Castledine Earle, 14 funkcja zwrotna, callback, 65 CDN, Content Delivery Network, 24 kolejka, 65 console.log, 91 koloru, 59 cudzysBowy, 234 skaczce, 64 stopniowe pojawianie si, 51 D stopniowe zanikanie, 51 wsuwanie, 51 definiowanie wysuwanie, 51 selektora jQuery, 247 animacji, wBasnego motywu, 305 kolejkowanie, 301 wBasnych zdarzeD, 291 usuwanie, 301 dekrementacja, 106 animowana nawigacja, 67, 69 delegacja zdarzeD, 257 API, Application Programming Interface, 171 dodawanie efektów, 42 aplikacja ThemeRoller, 305 dodawanie elementów, 47 arkusz splitter.css, 84 dodawanie elementów do klas, 41 arkusze stylów CSS, 27 dodawanie metod do jQuery, 285 atak Cross-site Scripting, 168 dokument HTML, 27 atrybut DOM, Document Object Model, 27 $.event.special, 298 domknicie, 162 class, 27 drzewo DOM, 27, 124 gallery.trigger, 117 drzewo rozwijane, 254 grid, 83 dymek podpowiedzi zaawansowany, 151 href, 75 dymki podpowiedzi, 147 id, 27, 34 dynamiczne przetwarzanie, 253 overflow, 224 dynamika animacji, 60 pageX, 120 dynamika liniowa, 60 prototype, 278 dynamika typu swing, 60 Pole ksi|k Kup ksi|k 326 jQuery. Od nowicjusza do wojownika ninja funkcje E anonimowe, 52 edycja wiersza, 269 obsBugi zdarzeD, 43, 119, 312 efekt lightbox, 230 opózniajce, 101 efekt przesuwania, 107 zagnie|d|one, 268 efekt tasowania, 109 zwrotne, callback, 52, 240, 282 efekt znikania, 224 zwrotne w stylu jQuery, 284 element div, 34 element selectable, 245 G element span, 254 element typu selectable, 244 galeria motywów, 304 elementy kontrolne, 266 galeria obrazów, 115 EULA, End User License Agreement, 230 GET, 169 Google CDN, 24 grafika sprite, 151 F faBszywy nagBówek, 262 H filtr, 36 animated, 147 hijax, 167 checked, 196 eq, 36, 99 I even, 36 first, 36 ikona Badowania, 181 last, 36 ikona Badowania globalna, 182 not, 147 ikona Badowania konfiguracja, 183 odd, 36 implementacja radio, 213 akordeonów, 132 selected, 196, 252 dymków, 152 filtry selektorów, 36 kart, 138 formularz, 192, 241 mechanizmu wtyczki, 279 formularz logowania, 143 Suckerfish, 129 formularze HTML, 195 inkrementacja, 106 funkcja instalacja jQuery, 23 addHandlers(), 212 instrukcja if, 45 alert(), 35, 91 interfejs jQuery UI, Patrz jQuery UI closeDialog(), 232 innerHTML(), 47 J jQuery(), 26, 47 openDialog(), 231 jzyk JavaScript, 317 positionLightboxImage(), 91 jQuery, 22, 56 reveal(), 268 jQuery UI, 19, 71 rotatePics(), 105 JSON, JavaScript Object Notation, 171 setTimeout(), 106, 118, 180, 183 setTips(), 152 K sleep(), 187 sort(), 249, 250 karty, 138 supports(), 19 karty w jQuery UI, 140 template(), 163 katalog ColorBox, 93 trim(), 288 katalog development-bundle, 71 Pole ksi|k Kup ksi|k SKOROWIDZ 327 katalog lib, 72 menu, 121 katalog localization, 200 akordeonowe, 132 klasa poziome, 128, 130 check-all, 204 rozwijane, 122, 127, 130 closed, 255 metoda $.ajax(), 173, 175, 309 lightbox, 89 flagi, 309 maxlength, 201 funkcje zwrotne, 312 opened, 255 obsBuga zdarzeD, 312 spoiler, 54 ustawienia, 310 tooltop, 150 metoda, 27 ui-helper-reset, 306 $.ajaxSetup(), 174 ui-icon-alert, 307 $.datepicker.setDefaults(), 217 ui-selecting, 246 $.each(), 172, 178 ui-state-error, 307 $.extend(), 289 ui-widget-header, 307 $.fn.extend(), 285 waiting, 128 $.get(), 175 warning, 28 $.getJSON(), 171, 191 koercja typów, 317 $.getScript(), 174 kolejkowanie animacji, 301 $.isFunction(), 283 komentarze, 158 $.post(), 175, 192 konflikt nazw, 300 addClass(), 41 konsola narzdzia Firebug, 92 adopt(), 228 konstrukcja, 157 andSelf(), 213 kontekst, 185 animate(), 57, 224, 301 append(), 261 appendTo(), 150 L attr(), 90, 253 licznik zdarzeD, 299 bind(), 207, 295 lightbox, 87, 230 checkScroll(), 184 animacje, 88 clearTimeout(), 118 Badowanie tre[ci, 88 click(), 43, 128 przej[cia, 88 clone(), 164, 263 wideo, 88 closest(), 259 lista zaznaczanych elementów, 244 colorbox(), 93 listy, 243 createStars(), 212 listy wyboru, 251, 253 css(), 27 literaB obiektu, 39 data(), 114, 150, 203 delay(), 66 dequeue(), 65 dialog(), 234 Badowanie obrazu, 225 die(), 170 BaDcuch, 66 disableSelection(), 227 BaDcuchy metod, 65, 206 doSlide(), 295 draggable(), 221, 222 droppable(), 221, 223 M empty(), 206 mechanizm odpinania funkcji, 295 end(), 201 mechanizm zaznaczanych elementów, 244 eq(), 105 extend(), 285 Pole ksi|k Kup ksi|k 328 jQuery. Od nowicjusza do wojownika ninja metoda sortable(), 226 fadeIn(), 179 stop(), 65 fadeOut(), 181 stopPropagation(), 126 filter(), 61, 134, 253 substring(), 229 find(), 113 swap(), 252 fixHeader(), 260, 261 TABLE.formwork(), 270 GALLERY.load(), 179 teardown(), 298 gallery.offset(), 117 text(), 50 gallery.slide(), 118 toggle(), 51 getJSON(), 168 toggleClass(), 256 hide(), 43, 202 trigger(), 207 hover(), 53, 58, 67 trim(), 206 html(), 50, 206 unbind(), 295 indexOf(), 253 validate(), 199 innerfade(), 107 metody kontroli kart, 142 insertAfter(), 48 metody pomocnicze w jQuery, 247 insertBefore(), 55 metody z prefiksem $., 286 is(), 45 metody zdarzeD, 315 Jcrop(), 96 minimalizacja kodu JavaScript, 25 jQuery.fn.extend(), 285 modalne okno dialogowe, 230 jScrollPane(), 78 moduB Selectable jQuery UI, 247 live(), 170 modyfikowanie elementów, 50 load(), 166, 169 modyfikowanie warto[ci pól, 205 mouseout(), 119 motyw Lightness, 304 next(), 55, 202 motyw, theme, 71 nextUntil(), 213 mo|liwo[ci przegldarki, 165 outerHeight(), 85 outerWidth(), 85 N parent(), 111 position(), 68 nadpisywanie funkcji, 288 prevAll(), 213 nagBówek h1, 34 preventDefault(), 125, 126, 202 nagBówek tabeli, 259 previous(), 55 narzdzia dla wid|etu wyboru daty, 217 prevUntil(), 213 narzdzia obsBugi AJAX, 173 queue(), 65, 302 narzdzie Firebug, 40, 92 ready(), 207 narzdzie ThemeRoller, 306 remove(), 49, 298 nazwa trkr, 301 removeClass(), 42 nieskoDczone przewijanie, 183 reset(), 188 resizable(), 86 O scrollTop(), 75 obiekt selectable(), 245 GALLERY, 178 serialize(), 192 JavaScript, 303 showCelebs(), 220 jQuery, 303 slice(), 267, 274 SWAPLIST, 251 slideDown(), 52, 131 this, 43 slider(), 219 TT, 152 slideToggle(), 52 obiekty odwzorowaD, 158 slideUp(), 52, 303 Pole ksi|k Kup ksi|k SKOROWIDZ 329 obiekty zdarzeD, 316 boxModel, 313 obraz animacji, 225 changeBubbles, 313 obsBuga cssFloat, 313 bBdów, 186 hrefNormalized, 313 IE6, 156, 305 htmlSerialize, 313 komunikatów, 230 leadingWhitespace, 313 motywów, 306 noCloneEvent, 314 opcji, 280 opacity, 314 zdarzenia document-ready, 32 scriptEval, 314 zdarzeD, 125 style, 314 zdarzeD jQuery, 290 submitBubbles, 314 odno[nik rating-0, 235 tbody, 314 odpalenie zdarzenia, 43 opcje wtyczek, 280 odpinanie zdarzeD, 294 literaBy obiektów, 280 okno dialogowe, 230 proste warto[ci, 280 okno dialogowe w jQuery UI, 233 operator opcja nierówno[ci, 318 animate, 219 przypisania, 318 autoOpen, 234 równo[ci, 318 cache, wBczenie buforowania, 142 [cisBej nierówno[ci, 319 ctiveClass, 223 [cisBej równo[ci, 319 draggable, 235 trójargumentowy, 103, 213 event, typ zdarzenia, 142 zaprzeczenia logicznego, 320 fx, efekt specjalny, 142 opóznienie, 100 helper, 223 osadzanie, inline, 40 minSize, 97 setSelect, 97 P spinner, komunikat Badowania, 142 opcje dynamiki, 61 panel wysuwany, 145 opcje dynamiki animacji, 60 panele, 143 opcje kart, 141 paragraf, 34 opcje metody $.ajax(), 309 parametr, 27 contentType, 310 parametr context, 185 context, 310 parametr data, 299 data, 311 parametr timeout, 109 dataType, 311 pasek postpu, 228 jsonp, 311 pasek przewijania, 77 password, 311 plik scriptCharset, 311 celebs.json, 191 timeout, 311 Jcrop.gif, 96 type, 311 jQuery-ui-1.7.2-min.js, 71 url, 311 jScrollPane.css, 77 username, 311 jScrollPane-1.2.3.min.js, 77 opcje metody draggable(), 223 readme, 59 axis, 223 pBywajca nawigacja, 74 containment, 223 pobieranie, 23 grid, 223 pod[wietlanie, 53 hoverClass, 223 podziaB panelu, 83 opcje metody $.support(), 312 podziaB tabeli na strony, 265 Pole ksi|k Kup ksi|k 330 jQuery. Od nowicjusza do wojownika ninja pokaz slajdów, 98 selektor, 27, 33, 37 kod JavaScript, 100 #disclaimer, 45 prawdziwe przenikanie, 103 atrybutu, 76 przenikanie, 98, 102 CSS3, 19 przewijana galeria, 112 potomków, 64 przewijanie miniatur, 110 zaw|anie selekcji, 35 zanikanie, 98 serwis StarTrackr!, 98 pole formularza, 34 Sharkie Craig, 14 pole textarea, 82 siatki danych, 264 poruszanie si, traversing, 37 skrypt zewntrzny, 174 POST, 169 sBowo kluczowe function, 80 potomek, child, 27 sortowanie, 226 powiadomienia, 230 sortowanie list, 249 powiadomienia 1-up, 238 standard CSS3, 19 powiadomienia w stylu Growl, 236 standard XHTML, 93 powtarzanie nagBówka tabeli, 263 style osadzone, 40 propagacja zdarzeD, 124 style zagnie|d|onych list elementów, 129 przechwytywanie zdarzeD, 43 Subversion, 25 przecignij i upu[, 221 Suckerfish, 129 przecignij i zniszcz, 221 suwak z jQuery UI, 218 przeBczanie elementów, 51 suwaki, 218 przeBczanie ukBadu, 79 przenikanie, cross-fade, 98 przestrzeD nazw colorize, 296 T przestrzeD nazw zdarzeD, event namespacing, 294 technika hijax, 167 przestrzeD nazw, namespace, 26, 159 technologia AJAX, 166 przewijaczka wiadomo[ci, 107 technologia GPS, 31 przewijanie, 73 technologia RFID, 31 przewijanie dokumentu, 75 ThemeRoller, 305 pseudoselektor tworzenie animacji, Patrz animacje hover, 129 tworzenie elementów, 90 visible, 45 tworzenie motywów wizualnych, 304 tworzenie pustego obiektu, 116 R tworzenie wBasnych selektorów, 289 reguBy filtra, 134 tworzenie wtyczki, 278 repozytorium wtyczek jQuery, 21 typ boolowski, 319 reszta z dzielenia, 105 RIA, Rich Internet Applications, 121 U rodzeDstwo, siblings, 28, 48 rodzic, parent, 27 ukrywanie elementów, 42 rozszerzanie jQuery, 285 usuwanie elementów, 49 rozwijane menu poziome, 130 usuwanie elementu z klasy, 42 usuwanie kolejki, 301 S W selekcja filtry, 36 walidacja formularzy, 196 testowanie, 35 walidacja online, 201 wybór wielu elementów, 36 warto[ci boolowskie, 320 zaw|anie, 35 Pole ksi|k Kup ksi|k SKOROWIDZ 331 warto[ wzgldna, 58 wtyczki jQuery, 280 wersje nocne, 25 wysyBanie danych, 191 widoczno[ elementów, 44 wy[wietlanie elementów, 42 wid|et wywoBanie, 27 akordeonu, 133 funkcja jQuery(), 27 akordeonu wielopoziomowego, 136 metoda, 27 CELEB, 191 parametr, 27 lightbox, 231 selektor, 27 oceny, 210 wywoBanie document-ready selectable, 245 akcja ready, 32 SORTER, 286 parametr alert(), 32 TABLE, 260 selektor document, 32 wyboru daty, 215 wywoBywanie kodu z opóznieniem, 100 wid|ety typu lightbox, 91 wBasno[ scrollHeight, 184 Z wBa[ciwo[ci CSS, 37 wBa[ciwo[ci zdarzeD, 290, 315 zakres widoczno[ci nazw, 161 wBa[ciwo[ zamiar zatrzymania wskaznika myszy, 131 boxModel, 313 zaznaczanie, 252 changeBubbles, 313 zaznaczanie kolumn, 273 cssFloat, 313 zaznaczanie sekwencji, 273 hrefNormalized, 313 zdarzenia, 290, 315 htmlSerialize, 313 blokowanie, 297 leadingWhitespace, 313 definiowanie, 291 lengh, 35 metody zdarzeD, 315 noCloneEvent, 314 odpinanie, 294 opacity, 147, 165, 314 przestrzeD nazw, 294 scriptEval, 314 wBasne obiekty zdarzeD, 316 style, 314 wBa[ciwo[ci, 290, 315 submitBubbles, 314 zdarzenia click, 297 tbody, 314 zdarzenia dotykowe, 297 z-index, 104 zdarzenia niestandardowe, 296 wskaznik dBugo[ci tekstu, 201 zdarzenia touchstart, 297 wtyczka zdarzenie bgiframe, 235 ajaxComplete, 176 ColorBox, 92 ajaxError, 188 Cycle, 108 ajaxSuccess, 176 DataTables, 272 beforeSend, 180, 181 highlightOnce, 282 blur, 203 Hover Intent, 131 click, 55, 144 InnerFade, 107 complete, 176 Jcrop, 95 document-ready, 32, 43, 80 Resizable, 81 error, 187 ScrollTo, 112 event.special, 297 ThickBox, 92 focus, 203 Validation, 199 hover, 130, 147 wtyczki, 59, 277 mouseout, 53, 67, 296 implementacja, 279 mouseover, 53, 120 konfiguracja, 278 multihover, 298 obsBuga opcji., 280 Pole ksi|k Kup ksi|k 332 jQuery. Od nowicjusza do wojownika ninja zdarzenie onSelect, 97 przewijania, 73 zródBa danych, 162 reveal, 293 submit, 198 success, 176 zmiany rozmiarów, 79 |dania AJAX, 174, 175 zBo|enie, 289 |danie GET, 169 zmiana rozmiaru okna, 78 |danie POST, 169 zmienna callback, 240 zmienne w jzyku JavaScript, 85 znak kropki (.), 34 znak krzy|yka (#), 34 znak Bcznika, 40 Pole ksi|k Kup ksi|k

Wyszukiwarka

Podobne podstrony:
Sztuka czarno bialej fotografii Od inspiracji do obrazu
Od Pskowa do Parkan 2 02 doc
MICHALKIEWICZ OD KOR u DO KOK u
BBC Planeta Ziemia 01 Od bieguna do bieguna
Bezpieczeństwo pracy Ergonomia oprogramowania od przepisów do praktyki
od obrazka do słowa
Od dysgrafii do kaligrafii prezentacja

więcej podobnych podstron