W jaki sposób stworzyć nawigację obsługiwaną za pomocą klawiatury w jQuery?
Podstawowym elementem każdej strony internetowej jest odpowiedni system nawigacji. W większości przypadków realizowany jest on za pomocą różnego typu stylizowanych i wizualizowanych pasków menu, obsługiwanych przede wszystkim za pomocą kursora myszki. Spróbujmy na chwilę odejść więc od tej normy i w ramach ćwiczenia jQuery stwórzmy nawigację działającą także z poziomu poszczególnych przycisków klawiatury.
Zarys teoretyczny
Problem możnaby rozwiązać za pomocą samego JavaScriptu i odpowiednich właściwości obiektu event. Idąc jednak z duchem czasu, postaram się wyjaśnić poruszany temat, używając także frameworku jQuery.
W bibliotece tej znajdziemy trzy podstawowe typy zdarzeń, dzięki którym można obsługiwać wciśnięcia przycisków na klawiaturze:
- keydown wywoływane w momencie wciśnięcia klawisza,
- keypress wywoływane w momencie wpisania znaku z klawiatury w dany element strony,
- keyup wywoływane w momencie zwolnienia przycisku.
Są to oczywiście ogólnie przyjęte definicje, gdyż implementacja tych zdarzeń może się w pewnym stopniu różnić w różnego typu silnikach przeglądarek.
Dla naszych potrzeb będziemy używać keypress. Obsługuje ono jednak tylko klawisze alfanumeryczne, co za tym idzie – jeżeli ktoś chciałby używać przycisków takich jak [Ctrl] czy [Shift], musiałby skorzystać z keydown.
Wszystkie trzy zdarzenia mają zbliżoną konstrukcję, którą pokazujemy poniżej.
$(obiekt).zdarzenie(function(parametr) {
if ( parametr.which == KOD_ASCII
|| parametr.keyCode == KOD_ASCII) {
alert(ZNAK);
}
});
Właściwość which jest dostępna i w keydown, i w keypress. Za to keyCode tylko w tym pierwszym. Należy także pamiętać, że keyCode w przypadku znaków alfabetycznych zwraca kod ASCII wielkich liter (od 65 do 90). W przypadku keypress są to odpowedniki małych liter.
$(document).keypress(function(e) {
if ( e.which == 100 ) {
alert(‘d’);
}
});
$(document).keydown(function(e) {
if ( e.keyCode == 68 ) {
alert(‘D’);
}
});
Agregator treści RSS z nawigacją klawiszową
Aby wytłumaczyć działanie powyższych zdarzeń, zbudujmy prosty agregator skróconych treści RSS ostatnich 9 publikacji blogów na Webhostingu. Pominę oczywiście kwestię samego kodu PHP odpowiedzialnego za syndykowanie treści, gdyż ogranicza się ona praktycznie do odpowiedniego załadowania XML, posługując się klasą DOMDocument. Nie to jest jednak przedmiotem tej porady.
Rysunek 1: przykładowy szablon.
Na początku należy pobrać bibliotekę jQuery, a także utworzyć odpowiednią strukturę xHTML naszego przykładu. Niech to będzie dwukolumnowa strona z nawigacją rozmieszczoną po lewej stronie i treścią po prawej.
<div id="container">
<div id="navigation">
<ul>
<li id="nav_id_0" class="selected_tab"><a href="javascript:changeTab('menu', 0);">Nagłówek pierwszy</a></li> <li id="nav_id_1"><a href="javascript:changeTab('menu', 1);">Nagłówek drugi</a></li>
</ul>
</div>
<div class="tabs" id="tab_id_0">
<h2>Nagłówek pierwszy</h2>
<p>Treść pierwsza</p>
</div>
<div class="tabs_invisible" id="tab_id_1">
<h2>Nagłówek drugi</h2>
<p>Treść druga</p>
</div>
</div>
Nadrzędny tag pozwoli na wyśrodkowanie całej strony. Pierwszy potomek o identyfikatorze navigation jest wspominanym już menu.
Wewnątrz jego listy możemy zauważyć kolejne identyfikatory które będą służyć do określenia aktywnego elementu poprzez nadanie mu klasy selected_tab oraz odnośniki w postaci JavaScriptowej funkcji określające typ akcji oraz identyfikator pozycji w menu. Dzięki temu będziemy mogli obsługiwać skrypt nie tylko z poziomu klawiatury, ale także klasycznie.
«poprzednia 1 2 następna »
Polecamy
Reklama
Popularne
Pobierałeś pirackie pliki? Uważaj! Kontrole antypirackie w domach użytkowników to codzienność
36
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Debata w sprawie ACTA: internauci spodziewali się chyba czegoś innego
14
Wynalazca WWW przed sądem: walczy tam o wolny dostęp do webowych technologii dla każdego
8
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
Internet w EU bez Facebooka i Google? Firmy nie mają wyboru: albo się dostosują, albo…
10
Zaktualizuj PHP do wersji 5.4, zyskasz za darmo nawet o kilkudziesiąt procent wyższą wydajność aplikacji
6
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
[Aktualizacja] Facebook zablokował Demotywatory.pl. W czym zawiniły?
36
FBI zamknęło Megaupload. Anonimowi dali się sprowokować. Teraz ich akcja uzasadni potrzebę SOPA?
17
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
„Donald matole, twój rząd dopadną kibole” – hakerska elita przyłącza się do walki z ACTA
23
Pobierałeś pirackie pliki? Uważaj! Kontrole antypirackie w domach użytkowników to codzienność
36
Społeczność
WebDev @slawek22
OK. Rozumiem i wiem, że koncerny stosują regionalizacje i nie...
slawek22 >są inne rodzime serwisy VOD z legalny filmami
WebDev no fakt... jeśli...
WebDev @BLACK BEAR®
"bo denerwujesz mi ludzi na forum” lool
Minister Zdrowia...
tobas ClickShop bardzo wolno działa!!!
Nie dajcie się nabrać na wygląd i...
blackbear @WebDev, widzę że muszę Ci rozjaśnić we łbie. Czytaj więc i nie pisz...
Jay Brak obsługi aplikacji x86/x64 ze zwykłych desktopów to kręcenie na siebie...
WebDev @slawek22
Tak jak ze wszystkim tak i z prawem własności można przesadzić...
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
- Marek: problem z menu (2)
- Marek: Własne checkboxy w HTML,CSS (1)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |









