Dodaj interaktywność do swojego projektu – JavaScript
Interaktywność stron, wywoływanie zdarzeń po kliknięciu przycisku myszy, walidacja formularzy - to wszystko elementy tworzące na stronie internetowej interakcje z użytkownikiem. Są one obsługiwane głównie dzięki zastosowaniu języków programowania, między innymi języka JavaScript (innym popularnym narzędziem stosowanym w tym celu jest jQuery).
Zaczniemy od tego, w jaki sposób załączamy kod JavaScript obsługujący zdarzenia. Następnie wyjaśnimy, jak poruszamy się i znajdujemy kolejne elementy, którym nadajemy interaktywność. Na koniec wykorzystamy wszystkie zdobyte informacje i zaprogramujemy zdarzenie.
Implementacja kodu JavaScript w pliku HTML
Implementacji kodu JavaScript w pliku HTML możemy dokonać na dwa sposoby:
umieszczając kod w kodzie HTML;
tworząc osobny plik.
Umieszczenie w kodzie HTML
W ramach pierwszej metody w dolnej części <body> umieszczamy <script> oraz wstawiamy między znacznikami dowolny kod, który przygotowaliśmy.
Linia 1. otwórz nawias ostrokątny script zamknij nawias ostrokątny.
Linia 2. prawy ukośnik prawy ukośnik w tym miejscu wpisujemy kod.
Linia 3. otwórz nawias ostrokątny prawy ukośnik script zamknij nawias ostrokątny.
Przygotowanie w osobnym pliku
W przypadku drugiej metody tworzymy w projekcie plik script.js i dodajemy w dokumencie HTML, na końcu <body>, tuż przed zamknięciem tagu, źródło pliku JavaScript.
Linia 1. otwórz nawias ostrokątny script src znak równości cudzysłów kropka prawy ukośnik js prawy ukośnik script kropka js cudzysłów type znak równości cudzysłów text prawy ukośnik javascript cudzysłów zamknij nawias ostrokątny otwórz nawias ostrokątny prawy ukośnik script zamknij nawias ostrokątny.
Cały kod zawarty w pliku script.js jest opakowany w zdarzenie DOMContentLoaded, które powoduje, że kod znajdujący się w jego wnętrzu jest wywoływany dopiero w momencie, gdy załaduje się cały HTML. Nie czeka on na zakończenie ładowania arkuszy stylów czy obrazów.
Kiedy mechanika JavaScript jest gotowa do działania, w konsoli deweloperskiej zostaje wyświetlony komunikat “documents is ready".
Wyszukiwanie elementów
Wyszukiwanie elementów na stronie jest kolejnym krokiem do dodania na niej interaktywności. Po ich odnalezieniu możemy dodawać kolejne zdarzenia, które mogą być wywołane, np. po kliknięciu zdjęcia czy przycisku.
Podstawowe metody wyszukiwania elementów oparte na języku JavaScript to:
Linia 1. document kropka querySelector otwórz nawias okrągły cudzysłów selector cudzysłów zamknij nawias okrągły średnik.
Linia 2. prawy ukośnik prawy ukośnik wyszukuje pierwszy element odpowiadający zapytaniu.
Linia 3. document kropka getElementById otwórz nawias okrągły cudzysłów id cudzysłów zamknij nawias okrągły średnik.
Linia 4. prawy ukośnik prawy ukośnik wyszukuje element z określonym id.
Linia 5. document kropka querySelectorAll otwórz nawias okrągły cudzysłów selector cudzysłów zamknij nawias okrągły średnik.
Linia 6. prawy ukośnik prawy ukośnik wyszukuje wszystkie elementy odpowiadające zapytaniu.
Linia 7. document kropka getElementsByTagName otwórz nawias okrągły cudzysłów tag cudzysłów zamknij nawias okrągły średnik.
Linia 8. prawy ukośnik prawy ukośnik wyszukuje elementy po tagu.
Linia 9. document kropka getElementsByClassName otwórz nawias okrągły cudzysłów className cudzysłów zamknij nawias okrągły średnik.
Linia 10. prawy ukośnik prawy ukośnik wyszukuje elementy po nazwie klasy.
Przykładowo, jeżeli chcemy zaleźć wszystkie paragrafy zawarte w znacznikach div w strukturze naszej strony, w pierwszej kolejności musimy zdefiniować zmienną, w której wywołujemy odpowiednią metodę.
Linia 1. var paragraf znak równości document kropka querySelectorAll otwórz nawias okrągły cudzysłów div p cudzysłów zamknij nawias okrągły średnik.
Aby sprawdzić poprawność działania naszego kodu, dodajemy console.log, który wyświetli nam w konsoli deweloperskiej informacje.
Linia 1. var paragraf znak równości document kropka querySelectorAll otwórz nawias okrągły cudzysłów div p cudzysłów zamknij nawias okrągły średnik.
Linia 2. console kropka log otwórz nawias okrągły paragraf zamknij nawias okrągły średnik.
Polecenie 1
Korzystając z przykładowego projeku strony WWWD13hPQoabprzykładowego projeku strony WWW, sprawdź możliwość wyszukiwania elementów. Otwórz plik script.js i na podstawie przedstawionych powyżej metod wykonaj następujące czynności:
Znajdź pierwszy element h2 na stronie.
Znajdź element o klasie welcome.
Znajdź element o id chartdiv.
Znajdź wszystkie elementy li, znajdujące się w tagu ul.
Pamiętaj, aby zdefiniować zmienne i zastosować console.log, który w konsoli deweloperskiej pozwoli sprawdzić poprawność kodu.
Linia 1. var elem podkreślnik h2 znak równości document kropka querySelector otwórz nawias okrągły cudzysłów h2 cudzysłów zamknij nawias okrągły średnik.
Linia 2. prawy ukośnik prawy ukośnik z zasady wyszukuje pierwszy element odpowiadajacy zapytaniu średnik.
Linia 3. console kropka log otwórz nawias okrągły elem podkreślnik h2 zamknij nawias okrągły średnik.
Linia 5. var elem podkreślnik welcome znak równości document kropka getElementsByClassName otwórz nawias okrągły cudzysłów welcome cudzysłów zamknij nawias okrągły średnik.
Linia 6. prawy ukośnik prawy ukośnik zapytanie wyszukuje wszystkie elementy o klasie otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny welcome otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny.
Linia 7. console kropka log otwórz nawias okrągły elem podkreślnik welcome zamknij nawias okrągły średnik.
Linia 9. var home znak równości document kropka getElementById otwórz nawias okrągły cudzysłów chartdiv cudzysłów zamknij nawias okrągły średnik.
Linia 10. prawy ukośnik prawy ukośnik zapytanie wyszukuje elementy po id.
Linia 11. console kropka log otwórz nawias okrągły home zamknij nawias okrągły średnik.
Linia 13. var ul znak równości document kropka querySelectorAll otwórz nawias okrągły cudzysłów ul li cudzysłów zamknij nawias okrągły średnik.
Linia 14. prawy ukośnik prawy ukośnik wyszukujemy w ten sposób wszystkie elementy listy.
Linia 15. console kropka log otwórz nawias okrągły ul zamknij nawias okrągły średnik.
Skoro HTML zbudowany jest na kształt rodziny, w której elementy mają rodziców, a często także rodzeństwo i dzieci, możemy również – poprzez relacje między nimi – wyszukiwać poszczególne elementy.
Znajdźmy pierwszy element o klasie "card‑description", a następnie wypiszmy w konsoli jego rodzica.
Linia 1. var card znak równości document kropka querySelector otwórz nawias okrągły cudzysłów kropka card minus description cudzysłów zamknij nawias okrągły średnik.
Linia 2. console kropka log otwórz nawias okrągły card kropka parentElement zamknij nawias okrągły średnik.
Polecenie 2
Analogicznie wyszukaj element o klasie "card", a następnie – korzystając ze słowa "children" – wypisz w konsoli wszystkie jego dzieci.
Linia 1. var cardParent znak równości document kropka querySelector otwórz nawias okrągły cudzysłów kropka card cudzysłów zamknij nawias okrągły średnik.
Linia 2. console kropka log otwórz nawias okrągły cardParent kropka children zamknij nawias okrągły średnik.
Tablice w JavaScript
Zgodnie z rozwiązaniem uzyskanym w Poleceniu 2 możemy zauważyć, że otrzymaliśmy zbiór różnych wartości. Jest to tablica, a jej konstrukcja wygląda następująco:
Tablica z czterema elementami:
Linia 1. var array znak równości otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 przecinek cudzysłów czwarty element cudzysłów zamknij nawias kwadratowy średnik.
Pusta tablica:
Linia 1. var arrayEmpty znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy średnik.
Tablice indeksujemy od zera, zatem pierwszy element tablicy ma indeks 0.
Linia 1. console kropka log otwórz nawias okrągły array otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły średnik.
Linia 2. prawy ukośnik prawy ukośnik wyświetli wartość 1.
Aby sprawdzić wielkość tablicy, możemy skorzystać z atrybutu length.
W pliku js stwórz tablicę z pięcioma różnymi owocami, a następnie wypisz w konsoli deweloperskiej, ile znajduje się tam elementów, oraz podaj nazwy trzeciej i szóstej wartości.
Eventy to zdarzenia wywoływane na stronie WWWstrona internetowastronie WWW. Możemy je wywoływać w zależności od rodzaju interakcji, np. poprzez kliknięcie, najechanie kursorem na element, przy edycji formularza, za pomocą klawiatury czy myszy. Aby dodać zdarzenie na stronie, w pierwszej kolejności wybieramy element, na jakim ma się ono zrealizować. U nas jest to przycisk o id = submitBtn
Linia 1. var button znak równości document kropka querySelector otwórz nawias okrągły cudzysłów kratka submitBtn cudzysłów zamknij nawias okrągły średnik.
Na przycisku dodajemy metodę addEventListener(). Podstawowe parametry, jakie wskazujemy w tej funkcji, określają, w jakiej sytuacji wydarzenie ma się wykonać (u nas przykładowo będzie to "click") i co dokładnie ma się stać po jego wywołaniu.
Linia 1. var button znak równości document kropka querySelector otwórz nawias okrągły cudzysłów kratka submitBtn cudzysłów zamknij nawias okrągły średnik.
Linia 3. button kropka addEventListener otwórz nawias okrągły cudzysłów click cudzysłów przecinek function otwórz nawias okrągły event zamknij nawias okrągły otwórz nawias klamrowy.
Linia 4. prawy ukośnik prawy ukośnik po kliknięciu w konsoli deweloperskiej pojawi się tekst cudzysłów button test cudzysłów.
Linia 5. console kropka log otwórz nawias okrągły cudzysłów button test cudzysłów zamknij nawias okrągły średnik.
Linia 6. zamknij nawias klamrowy zamknij nawias okrągły średnik.
Podsumowując: zdefiniowaliśmy zdarzenie, które jest wywoływane na przycisku o id = submitBtn. Po jego kliknięciu, w konsoli dewelopera wyświetli się tekst: "button test".
Zobaczmy jeszcze kolejny przykład działania kodu w języku JavaScript.
Zdarzenie dotyczy wyświetlenia przepisu po kliknięciu przycisku Zobacz mój ostatni przepis. W pierwszej kolejności musimy znaleźć zatem ten element i przypisać go do zmiennej. Od razu sprawdźmy, czy kod, który zapisaliśmy, jest poprawny, przez użycie console.log.
Linia 1. var recipe znak równości document kropka getElementsByClassName otwórz nawias okrągły cudzysłów show minus recipe cudzysłów zamknij nawias okrągły średnik.
Linia 2. console kropka log otwórz nawias okrągły recipe zamknij nawias okrągły średnik.
Po wywołaniu zmiennej w konsoli deweloperskiej widzimy, że to tablica.
Musimy zatem pamiętać, aby przy wywoływaniu zdarzenia wskazać, że jest to pierwszy element - robimy to poprzez dodanie [0].
Linia 1. var recipe znak równości document kropka getElementsByClassName otwórz nawias okrągły cudzysłów show minus recipe cudzysłów zamknij nawias okrągły średnik.
Linia 3. recipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka addEventListener otwórz nawias okrągły cudzysłów click cudzysłów przecinek function otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 4. prawy ukośnik prawy ukośnik ciało funkcji.
Linia 5. zamknij nawias klamrowy zamknij nawias okrągły średnik.
Po kliknięciu przycisku „Zobacz mój ostatni przepis” chcemy, aby pojawił się przepis. Następnym krokiem jest w takim razie odnalezienie elementu o klasie .favorite‑recipe (który ma się wyświetlać lub chować po kliknięciu przycisku) oraz skorzystanie z konstrukcji warunkowej if. Konstrukcję tę znamy doskonale z innych języków programowania, więc nie będziemy jej omawiać w tym miejscu.
Linia 1. var recipe znak równości document kropka getElementsByClassName otwórz nawias okrągły cudzysłów show minus recipe cudzysłów zamknij nawias okrągły średnik.
Linia 3. recipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka addEventListener otwórz nawias okrągły cudzysłów click cudzysłów przecinek function otwórz nawias okrągły e zamknij nawias okrągły otwórz nawias klamrowy.
Linia 4. var parentEl znak równości this kropka parentElement kropka parentElement średnik.
Linia 5. var favoriteRecipe znak równości parentEl kropka getElementsByClassName otwórz nawias okrągły cudzysłów favorite minus recipe cudzysłów zamknij nawias okrągły średnik.
Linia 7. if otwórz nawias okrągły favoriteRecipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka display znak równości znak równości znak równości cudzysłów flex cudzysłów zamknij nawias okrągły otwórz nawias klamrowy.
Linia 8. favoriteRecipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka display znak równości cudzysłów none cudzysłów średnik.
Linia 9. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 10. favoriteRecipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka display znak równości cudzysłów flex cudzysłów średnik.
Linia 11. zamknij nawias klamrowy.
Linia 13. zamknij nawias klamrowy zamknij nawias okrągły średnik.
Ciekawostka
Wyszukiwanie elementów w dokumencie HTML może również być związane z relacjami względem innych elementów, np. rodzic, dziecko, rodzeństwo. W przypadku omówionego wyżej zdarzenia odnaleźliśmy element odnosząc się do relacji dziecko‑rodzic, wykorzystując sformułowanie parentElement.
Polecenie 4
Na podstawie przeanalizowanego kodu spróbuj wykorzystać informację dotyczącą wywoływania zdarzeń na stronie internetowej i dodaj kod tak, aby po kliknięciu przycisku Zobacz mój ostatni przepis, podświetlał się on na czerwono. Kiedy przepis zostanie schowany, należy przywrócić pierwotny kolor.
Linia 2. var recipe znak równości document kropka getElementsByClassName otwórz nawias okrągły apostrof show minus recipe apostrof zamknij nawias okrągły średnik.
Linia 4. recipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka addEventListener otwórz nawias okrągły apostrof click apostrof przecinek function otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 5. var parentEl znak równości this kropka parentElement kropka parentElement średnik.
Linia 6. var favoriteRecipe znak równości parentEl kropka getElementsByClassName otwórz nawias okrągły apostrof favorite minus recipe apostrof zamknij nawias okrągły średnik.
Linia 8. if otwórz nawias okrągły favoriteRecipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka display znak równości znak równości znak równości cudzysłów flex cudzysłów zamknij nawias okrągły otwórz nawias klamrowy.
Linia 9. favoriteRecipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka display znak równości cudzysłów none cudzysłów średnik.
Linia 10. recipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka backgroundColor znak równości cudzysłów kratka 293462 cudzysłów średnik.
Linia 11. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 12. favoriteRecipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka display znak równości cudzysłów flex cudzysłów średnik.
Linia 13. recipe otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka style kropka backgroundColor znak równości cudzysłów red cudzysłów średnik.
Linia 14. zamknij nawias klamrowy.
Linia 16. zamknij nawias klamrowy zamknij nawias okrągły średnik.
Polecenie 5
Znajdź w repozytorium element o klasie color_photo, a następnie utwórz zdarzenie, które – po podwójnym kliknięciu zdjęcia – będzie w konsoli wypisywało dblclick.
Linia 1. var command znak równości document kropka getElementsByClassName otwórz nawias okrągły apostrof color podkreślnik photo apostrof zamknij nawias okrągły średnik.
Linia 2. console kropka log otwórz nawias okrągły command zamknij nawias okrągły średnik.
Linia 4. command otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kropka addEventListener otwórz nawias okrągły apostrof dblclick apostrof przecinek function otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 5. console kropka log otwórz nawias okrągły apostrof dblclick apostrof zamknij nawias okrągły średnik.
Linia 6. zamknij nawias klamrowy zamknij nawias okrągły średnik.
Słownik
dokument HTML
dokument HTML
dokument (strona WWW) czytany przez przeglądarki internetowe, widoczny pod konkretnym adresem URL; zawiera tekst, odnośniki (linki), informacje o multimediach i zdjęciach
link
link
inaczej odnośnik; aktywny fragment tekstu albo obrazek; pozwala przejść na inny adres URL albo wykonać inną czynność, np. przesłać zapytanie przez formularz kontaktowy
strona internetowa
strona internetowa
zbiór dokumentów HTML połączonych ze sobą linkami URL (odnośnikami); dokumenty te znajdują się w obrębie jednej domeny internetowej (serwisu albo witryny)
tablica
tablica
rodzaj danych, który pozwala w jednej zmiennej przechowywać wiele wartości; może zawierać różne typy danych, m.in. liczby, stringi, obiekty, funkcje