jQuery

jQuery
jQuery to jedna z najbardziej popularnych bibliotek/frameworków do javascript. Jej popularność oczywiście znikąd się nie bierze. Dzięki tej bibliotece jesteśmy w stanie o wiele szybciej i sprawniej pisać nasze skrypty, nie martwiąc się przy tym o kompatybilność z różnymi przeglądarkami.
Główne zalety tej biblioteki:
- Mała objętość skryptów, prosta składnia
- Mała objętość samej biblioteki
- Bardzo dużo dodatkowych pluginów
Minusy? Pisanie z wykorzystaniem jQuery rozleniwiają ^^.
Zaczynamy
Aby zacząć używać jQuery, będziemy musieli standardowo dołączyć jej plik do naszej strony. Możemy albo ściągnąć plik z biblioteką na dysk, albo odwołać się np do zewnętrznych zasobów, które udostępniają zawsze najnowszą wersję tego pliku:
<script type="text/javascript" src="jquery.js"></script> //dla lokalnego pliku //lub <script src="http://code.jquery.com/jquery-latest.min.js"></script>
Możemy też połączyć oba sposoby, co jest najbezpieczniejszym sposobem. Jeżeli jquery nie zostanie pobrane z zewnętrzengo adresu, wówczas uruchomimy ją lokalnie poprzez utworzenie skryptu z src wskazującym na lokalny zasób:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery.min.js"><\/script>')</script>
Osobiście polecam właśnie tą metodę. Pobieranie jQuery z zewnątrz nie obciążą naszego łącza plus udostępnia zawsze najnowszą wersję tej biblioteki. Dodatkowe informacje znajdziesz tutaj
Znak $ i składnia łańcuchowa
jQuery ma bardzo zwięzłą konstrukcję skryptów, do której wykorzystuje składnię łańcuchową. Każdy taki łańcuch rozpoczyna się znakiem $, a poszczególne polecenia są łączone w łańcuchy za pomocą kropki. Poniższy przykład ilustruje zastosowanie jquery:
$('#pierwszy').css('color','red').hide('slow').show(3000);
Powyższe polecenie wystarczy podzielić względem kropek:
- Pobieramy obiekt #pierwszy, po czym wykonujemy na nim kilka operacji:
- Ustawiamy mu kolor na czerwony
- Ukrywamy go (wolno)
- Po czym z wolna pokazujemy (3 sekundy)
Banalna sprawa - prawda?. Ileż kodu trzeba by było napisać w czystym JS żeby uzyskać podobne efekt. Dodatkowo trzeba by było obsłużyć kilka wersji przeglądarek...
Poniżej zamieszczam kilka przykładów dla pobierania elementów ze strony:
$('*') //pobranie wszystkich elementów na stronie
$(div) //pobranie wszystkich divów na stronie
$('div.czerwony') //pobranie div o klasie czerwony
$('div.czerwony#duzy') //pobranie div o klasie czerwony i id duzy
$('div p') //wszystkie p zawierające się w div
$("div#cont > p") //wszystkie p mieszczące się bezpośrednio w div o id cont
$('p,span , div.czerwoy') //pobranie wszystkich p, span oraz divów o klasie czerwony
$('ul li.wyroznione') //pobranie li o klasie wyroznione
$('p:first') //pobranie pierwszego p
$('img[width=100]) //pobranie wszystkich img, które mają width=100
$("label + input") //wszystkie inputy, które bezpośrednio przed sobą mają label
$("div#pierwszy ~ div") //wszystkie divy, które następują po div#pierwszy
Jak widać, w większości przypadków wystarczy wykorzystać prostą składnię CSS.
JQuery udostępnia także sporo metod dodatkowych, które możemy wykorzystać do pobrania obiektów. Wśród nich możemy wymienić takie jak:
- eq(index) - czyli pobierz z listy pobranych elementów element z danym indeksie,
- lt(index) - pobierz elementy o indeksie mniejszym od danego,
- gt(index) - pobierz elementy o indeksie większym itp.
$('*') //pobranie wszystkich elementów na stronie
$('div.czerwony p').eq(2) //pobranie trzeciego p w div.czerwony
$('p span').gt(1).css({color:red,fontWeight:bold}) //wszystkie spany w p z pominięciem pierwszego ustawione mają kolor czerwony i są przekreślone
Podobnych pobrań można wymieniać w nieskończoność... Nie ma sensu wymieniać ich wszystkich w tym miejscu. Wystarczy odwiedzić stronę http://jqapi.com/ po czym przejść do zakładki Selectors > Basic filters (okazyjnie przeglądając i inne zakładki).
document ready
Aby operować na elemetach strony powinniśmy je pobrać. Aby mieć pewność że takie elementy już istnieją (czyli, że dokument DOM został utworzony), skorzystamy z instrukcji $(document).ready, która wywoła wewnętrzny kod dopiero po załadowaniu całego dokumentu strony.
$(document).ready(function() {
//...
tutaj nasze skrypty jquery
//...
})
W praktyce 99% skryptów jQuery wstawiane jest wewnątrz tej konstrukcji, dlatego musimy ją znać jak paciorek.
Aby się nie powtarzać w nieskończoność, w poniższych przykładach będę zamieszczał tylko omawiane części kodu. W praktyce każdy z nich powinien zawierać stosowne tagi oraz część $(document).ready(). Mam nadzieję, że czytając poniższy kod będziesz w stanie spokojnie sobie go przerobić dla własnych celów.
Eventy w jquery
Obsługa zdarzeń w jquery jest dziecinnie prosta. Wystarczy przypiąć zdarzenie do pobranego obiektu bezpośrednio, lub skorzystać z metody bind().
$('input#guzik').click(function() {
console.log('test');
})
//lub
$('input#guzik').bind('click', function() {
console.log('test');
})
//lub w wersji > 1.4
$('input#guzik').bind({
'click' : function() {
console.log('test');
}
})
Dla przycisku #guzik przypisaliśmy zdarzenie click, w którym wykonujemy anonimową funkcję. Wypisuje ona w konsoli firebuga tekst "test" (jeżeli nie masz FF wraz z tym dodatkiem, zamień tą linijkę na inną komendę typu alert() albo podobną). Nie ma znaczenia którą metodę przypisania użyjemy - wszystkie działają identycznie. Ostatnia metoda wydaje się nieco długa, jest ona jednak bardzo czytelna, jeżeli chcemy podpiąć pod dany obiekt kilka zdarzeń na raz.
Aby odwołać się do obiektu wywołującego, wskazujemy go instrukcją this. To już wiemy z rozdziału o zdarzeniach. Nas jednak nie interesuje "czysty" obiekt js, a jego jquerowy odpowiednik. Aby taki obiekt uzyskać, wystarczy nasz "this" podstawić pod jquery, stosując konstrukcję $(this). Dzięki temu uzyskujemy obiekt jquery wskazujący na wywołujący element.
$('a.link').click(function() {
alert($(this).attr('href'));
return false;
})
<a class="link" href="http://jakis_adres.com">Pokaż href</a>
<a class="link" href="http://jakis_inny_adres.com">Pokaż href</a>
$('p').each(function() {
var $t = $(this);
$t.css({
"color" : "blue",
"text-decoration" : "underline"
});
$t.click(function() {
alert('Link prowadzi do: ' + $(this).attr('href'))
})
})
Dla każdego (each) pobranego p wykonujemy funkcję, w której ustawiamy dla p kolor niebieski wraz z podkreśleniem, oraz ustawiamy zdarzenie click, w którym wykonujemy funkcję wyświetlającą okienko alert z atrybutem href danego p. Znak $ przy nazwie zmiennej $t to tylko ułatwienie dla nas. Dzięki temu wiemy, że dana zmienna jest obiektem jquery, i możemy dla niej wywoływać wszystkie metody tej biblioteki.
Oczywiście uniwersalnosć jQuery sprawia, że powyższy kod możemy nieco "spakować":
$('p').css({color:blue,textDecoration:underline})
.click(function() {
alert('Link prowadzi do: ' + $(this).attr('href'))
})
Animacja w jQuery
jQuery udostępnia kilka ciekwych efektów gotowych do użycia:
- show(szybkosc, funkcja_zwrotna) - pokazanie obiektu. Parametry są opcjonalne. Szybkość możemy podać zarówno słownie: "slow", "normal", "fast", lub liczbowo. Parametr f wskazuje nazwę funkcji która zostanie wywołana po zakończeniu animacji. Można tutaj zastosować funkcję anonimową:
- hide(szybkosc, funkcja_zwrotna) - ukrywa obiekt:
$("div#ukryty").click(function() { $(this).hide('slow', function() { console.log('obiekt został ukryty'); }); }); - fadeIn(szybkość, funkcja_zwrotna) - płynne pojawianie się obiektu.
$("a").click(function () { $("div").fadeIn(3000); return false; }); - toggle() - funkcja pokazuje lub ukrywa obiekt w zależności od danego stanu
- fadeOut(szybkość, funkcja_zwrotna) - płynne ukrywanie obiektu.
- fadeTo(szybkość, przezroczystość, funkcja_zwrotna) - płynne ustawienie przezroczystości do poziomu z parametru "przezroczystość":
$("a").click(function() { $("div#pierwszy").fadeTo(2000, 0.32); }); - slideDown(szybkość, funkcja_zwrotna) - płynne "wysunięcie" obiektu w dół
- slideUp(szybkość, funkcja_zwrotna) - płynne "zsunięcie" obiektu w górę
- slideToggle(szybkość, funkcja_zwrotna) - płynne "zsunięcie" obiektu w górę lub dół - w zależności od aktualnego stanu
Są to standardowe efekty jQuery i w większości przypadków wystarczają do naszych zastosowań. Są jednak przypadki, że chcielibyśmy stworzyć własną animację.
Możemy to zrobić za pomocą metody animate(animowane_wlasciwosci, czas, rodzaj_animacji, funkcja_zwrotna). Najbardziej interesującymi nas parametrami są "animowane_wlasciwosci", w których podajemy atrybuty css, oraz czas w którym wykona się animacja:
$("#go").click(function(){
$("#block").animate({
width: "500px",
opacity: 0.4,
marginLeft: "0.6in",
fontSize: "3em",
borderWidth: "10px"
}, 1500 );
});
Parametr funkcja_zwrotna jak w przypadku pozostałych efektów wywołuje funkcję, która wykona się po zakończeniu animacji.
Parametr rodzaj_animacji określa przebieg animacji. jQuery posiada wbudowane dwa rodzaje przebiegu animacji: "linear" i "swing". Aby skorzystać z innych rodzajów, powinniśmy skorzystać z dodatkowych pluginów do jQuery, np. tego: http://gsgd.co.uk/sandbox/jquery/easing/.
$("p#nty").click(function() {
$(this).animate({
height:200,
width:400,
opacity: 0.5
}, 1000, 'linear', function(){ alert("koniec animacji");
});
});
Kliknij tutaj
W powyższych przykładach animowane właściwości ustawiłem na sztywno.
W jQuery od wersji 1.2 można zastosować konstrukcję -= lub += która odejmie lub doda odpowiednią wielkość od aktualnej:
$("#go2").click(function(){
$("#block2").animate({
width: "+= 300",
height: "+= 50",
opacity: "-= 0.5",
duration : 1000 //<- inny sposób deklaracji czasu trwania animacji
});
});
Na zakończenie tego działu przyjżyjmy się pewnej sytuacji. Mamy blok, po najechaniu na który chcemy płynnie zmienić jego rozmiary w zależności od tego czy kursor na nim jest czy nie.
$('#balonik_test')
.mouseover(function() {
$(this).animate({width:300}, 500);
})
.mouseout(function() {
$(this).animate({width:200}, 500);
});
Jeżeli mamy drewno zamiast palcy, a nasza obsługa komputera powoduje, że nasi znajomi wydają dziwne dźwięki, nie zauważymy żadnego problemu. Wystaczy jednak kilka razy szybko kliknąć na powyższy blok, aby zobaczyć jak nasza animacja zaczyna szaleć.
Spowodowane jest to tym, że nasza animacja nie zdąży się do końca wykonać, a my chcemy odpalić ją ponownie (click, click, click).
Aby temu zapobiec musimy posiłkować się dowolną z dwuch technik. Pierwsza z nich polega na wykorzystaniu metody stop(), która zatrzyma odpaloną animację.
Druga metoda polega na odpalaniu kolejnej animacji dopiero po skończeniu działania poprzedniej. Wykorzystamy do tego warunek .is(':animated') lub .not(':animated'). Pierwszy odfiltruje elementy, które są animowane, a drugi te, które animowane nie są. Poniższe przykłady demonstrują obie metody:
$("#balonik_stop")
.mouseover(function() {
$(this).stop().animate({width:300}, 500);
})
.mouseout(function() {
$(this).stop().animate({width:200}, 500);
});
$("#balonik_not").toggle(
function(){
$(this).not(':animated').animate({width:300}, 500);
},
function(){
$(this).not(':animated').animate({width:200}, 500);
}
);
//lub
$("#balonik_not").toggle(
function(){
if (!$(this).is(':animated')) $(this).animate({width:300}, 500);
},
function(){
if (!$(this).is(':animated')) $(this).animate({width:200}, 500);
}
);
W praktyce powyższe dwa sposoby sprawdzają się w innych zastosowaniach. Metoda stop() lepiej sprawdza się w zdarzeniach mouseover i mouseout, natomiat sprawdzanie czy obiekt jest animowany lepiej stosować przy zdarzeniach click.
Dodatkowe linki
Przykładów wykorzystania jQuery jest w internecie tysiące. Poniżej zamieszczam kilka linków które warto "przewertować":
- http://jquery.com/ - bohaterka tego rozdziału
- http://jqapi.com/ - najlepszy dostępna dokumentacja dla jquery. Obowiązkowa pozycja :)
- http://visualjquery.com/ - to co powyżej ale w gorszej formie
- http://ferrante.pl/2007/07/30/jquery-to-latwe/ - bardzo dobry kurs - warto przejrzeć tą stronę, bo sam kurs ma więcej "odcinków"
- http://jqueryui.com/ - biblioteka z efektami do jQuery. Przydatne cacko :)
- http://jqueryfordesigners.com/tag/screencast/ - screencasty o jQuery
- http://www.webresourcesdepot.com/jquery-image-crop-plugin-jcrop/ - strona z dodatkami do stron. Można tutaj też znaleźć bardzo dużo dodatków do jQuery (których używanie bardzo polecam)
- http://www.learningjquery.com/ - strona o jQuery. Bardzo dużo ciekawych rzeczy o tej bibliotece
- http://www.smashingmagazine.com/2008/09/16/jquery-examples-and-best-practices/ - strona którą trzeba odwiedzać :)
- http://www.webdesignerwall.com/tutorials/jquery-tutorials-for-designers/ - przydatna strona, zawierająca bardzo dobre tutoriale
- http://www.1stwebdesigner.com/tutorials/53-jquery-tutorials-resources-tips-and-tricks-ultimate-collection/ - zbiór tutoriali o jQuery
- http://www.noupe.com/tutorial/51-best-of-jquery-tutorials-and-examples.html
- www.google.pl - ostatnia strona w zestawieniu. Nieograniczone źródło wiedzy na tej biblioteki
Źródło:
- [url]http://doman.art.pl/kursjs/kurs/jquery/jquery.html[/ur;]
Aby dodawać komentarze musisz być zalogowany!
