od Podstaw
9 godz. 20 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJavaScript to język programowania, który napędza niemal wszystkie strony internetowe. Dopełnia on technologie HTML i CSS, za pomocą których tworzymy strukturę i wygląd dokumentu. Co jednak w sytuacji, gdy chcemy po kliknięciu w wybrany przycisk wyświetlić powiększone zdjęcie lub wczytać dodatkowe dane z serwera? To właśnie w takich sytuacjach przydaje się język JavaScript i tzw. DOM API, dostępne w przeglądarce. Jak się przekonasz, możliwości nowoczesnych przeglądarek w połączeniu z tym językiem są naprawdę ogromne.
Język JavaScript może być używany nie tylko na stronach internetowych. Z tego powodu, w kursie omówimy najpierw najważniejsze konstrukcje tego języka, które są niezależne od platformy uruchomieniowej. Dzięki temu zbudujesz fundamenty niezbędne do tego, by wykorzystać ten język np. w środowisku Node.js. Krok po kroku omówimy sposoby tworzenia zmiennych, dostępne typy danych i operatory. Następnie zobaczysz jak tworzyć tablice i obiekty, z jakich instrukcji warunkowych i pętli możesz korzystać, a także jak tworzyć własne funkcje. Przekazywana wiedza uwzględniać będzie nowości, które pojawiły się w języku wraz z rewolucyjnym standardem EcmaScript 6 (ES6).
Sam język JavaScript to nie wszystko, by tchnąć ducha w strony internetowe. Z tego powodu, przeglądarki internetowe udostępniają tzw. DOM API. To interfejs, który z użyciem języka JavaScript pozwala na manipulację treścią i wyglądem strony. W kursie bardzo dokładnie omówimy czym jest Obiektowy Model Dokumentu, a także jak z nim pracować. Zobaczysz jak tworzyć nowe elementy HTML i wstawiać je na stronę, jak modyfikować ich treść, atrybuty, style czy klasy CSS. Poznasz sposoby na odczytywanie położenia elementu na stronie i jego wymiarów, które będą niezbędne w wielu sytuacjach. Dowiesz się także, jak przypisywać obsługę zdarzeń w przeglądarce, by np. wywołać własną funkcję, gdy ktoś kliknie w wybrany przez Ciebie przycisk.
JSON to popularny format wymiany danych, a Ajax to potoczna nazwa dla asynchronicznych zapytań HTTP, które wysyłać możemy z poziomu kodu JavaScript. Dziś niemal każda strona internetowa wykorzystuje te technologie. W niektórych przypadkach jako dopełnienie podstawowej funkcjonalności witryny, a w innych jako główny motor napędzający stronę. Jeśli kiedykolwiek widziałeś, jak na stronie internetowej jakaś treść "doczytuje" się np. podczas przewijania - widziałeś w praktyce Ajax. W jednym z rozdziałów kursu zobaczysz, jak pracować z tym formatem, a także jak wysyłać wspomniane zapytania do serwera.
Choć kurs który masz przed sobą, jest kursem dla początkujących, to aby zrozumieć jak działa język JavaScript i jak z nim się współcześnie pracuje, omówimy dwa ważne tematy - zarządzanie zależnościami i bundlowanie kodu. Dowiesz się czym jest npm i jak z jego pomocą pobierać paczki gotowego kodu z internetu, a także jak sprawić, by bez trudnu dołączać je do własnego kodu. W tym celu skorzystamy z narzędzia snowpack, które pozwoli nam także na optymalizację kodu przed jego wypuszczeniem w świat. Na tym etapie omówimy również jak działają moduły ESM, pozwalające dzielić kod na mniejsze części.
Kurs podzielony został na możliwie krótkie lekcje, do których w każdej chwili możesz wrócić. Jeśli zatem zapomnisz jak odczytywać wymiary elementu na stronie, szybko odnajdziesz odpowiednią lekcję. Czym jednak była by sama teoria i proste przykłady, bez pokazania, jak połączyć je w całość i wykorzystać w praktyce? Dobra wiadomość jest taka, że w kursie stworzymy aż 5 praktycznych projektów, wykorzystujących zdobytą wcześniej wiedzę. Najpierw napiszemy program losujący Dużego Lotka, następnie dynamiczny pasek postępu przeczytania artykułu, dymek pojawiający się nad elementem po najechaniu na niego myszą, wygenerujemy tabelkę w użytkownikami na podstawie danych JSON, a na koniec tworzymy prosty odtwarzacz wideo, z możliwością pauzowania i przewijania filmu.
Kurs ten jest dla wszystkich osób, które znają już podstawy HTML i CSS i chciałyby przejść poziom wyżej i dodać do swoich stron dynamiczności. Żadna wcześniejsza wiedza z zakresu JavaScript nie jest wymagana, ale zalecana jest podstawowa wiedza z zakresu samego programowania (czym są zmienne, pętle, funkcje itd.). Materiał ten będzie również świetnym odświeżeniem i usystematyzowaniem wiedzy dla osób, które już z tym językiem miały do czynienia. Po przerobieniu tego kursu będziesz gotowy, by poznawać język JavaScript dalej i zacząć korzystać z nowoczesnych frameworków.
W tej lekcji pokażę Ci jak utworzone elementy można wstawiać na stronę, czyli
wreszcie zobaczysz jak z poziomu języka JavaScript możemy modyfikować ten
obiektowy model dokumentu, czyli tak naprawdę wyświetlać coś na stronie.
Mamy takie dwa elementy ul z identyfikatorem list 1 i list 2.
Na nich się będziemy chcieli skupić, więc najpierw będę chciał się odwołać do tego
list 1, czyli po prostu znaleźć ten element.
Zapiszemy sobie go w jakiejś stałej. Nazwiemy to np.
list 1 i document.querySelector po identyfikatorze list 1
znaleźliśmy ten element. I teraz chciałbym
utworzyć nowy element li i wstawić go tutaj na koniec.
Więc jak widzisz, wygląda to tutaj w
następujący sposób, tak samo jak widzieliśmy to na stronie w drzewie DOM
i za tym elementem będę chciał wstawić nowy element. Dlatego utworzę sobie taki
nowy element, stałą nazwę li i tak jak w lekcji poprzedniej pokazywałem
za pomocą createElement utworzymy sobie element li.
Czyli mamy już taki element, ale on na razie nie ma również żadnego tekstu.
Zatem utworzę sobie jeszcze taką stałą tekst
i tak jak w poprzedniej lekcji Ci
pokazywałem, zrobimy createTextNode i wpiszemy sobie tutaj np. treść.
Potem jeszcze w tym kursie pokażę Ci, jak
w trochę łatwiejszy sposób można zarządzać treścią danego elementu
ale na razie chcę Ci pokazać, że taki TextNode to również jest pełnoprawny obiekt,
który możemy przekazać do metody, którą właśnie teraz wywołam.
Będzie to metoda dostępna na wszystkich elementach, jakie możesz sobie stworzyć
albo znaleźć w drzewie dokumentu i nazywa się appendChild
i jej należy przekazać właśnie albo jakiś Element, albo TextNode. Więc
przekazujemy go tutaj w ten sposób i dzięki temu ten element li będzie miał
już wewnątrz treść właśnie z takim tekstem.
I teraz pozostało ten element wstawić na
stronę właśnie do UL, które tutaj sobie zapisałem i wyszukałem,
a więc list 1
i znowu można powiedzieć appendChild,
albo można skorzystać właśnie z metody append, tylko to jest trochę nowsza metoda.
Te metody, które Ci pokazuję działają we
wszystkich nowoczesnych przeglądarkach, więc tutaj nie ma się czym martwić,
natomiast samo appendChild jest po prostu trochę starszą metodą,
też chciałem Ci ją pokazać, żebyś wiedział, że taka istnieje.
Ona będzie działać w tym przypadku tak samo, więc przekażemy sobie tutaj li
i teraz jeżeli to zapiszę, to kiedy strona się wczytuje i ten skrypt
jest tutaj, on się wykona, to zostanie to wszystko dodane.
Czyli ten jeden element zostanie dodany tutaj.
Natomiast bardzo ważna uwaga, gdybyśmy ten skrypt umieścili gdzieś indziej, np.
tutaj w head to to nam by nie zadziałało,
bo w momencie kiedy przeglądarka dojdzie do tego skryptu, zacznie go wczytywać
i będzie chciała na stronie wyszukać elementu z identyfikatorem list 1
to tutaj zostanie zwrócone null, dlatego,
że ten element jeszcze nie został utworzony.
Jak to obejść
to jeszcze Ci powiem kiedy będziemy mówili o eventach,
natomiast generalnie dobrą praktyką jest,
aby te skrypty umieszczać zawsze na dole. I tutaj też mamy pewność, że wszystkie te
elementy zostały już utworzone przez przeglądarkę.
I jeżeli ten skrypt wyszukuje tego elementu to go po prostu znajdzie.
OK, zapiszmy, strona się odświeży i zauważ, że na samym końcu
jak najbardziej został tutaj dodany nowy element li, który możemy sobie podejrzeć.
A więc zrobiliśmy to dynamicznie z użyciem języka JavaScript.
Pokażę Ci teraz ciekawą rzecz, bo co prawda my ten element li wstawiliśmy na
stronę, ale my nadal mamy do niego odwołanie.
Czyli jest tutaj on pod li, dokładnie tak
samo jak byśmy sobie go wyszukali na stronie. I jeżeli chciałbym ten element z
jakiegoś powodu przenieść do drugiej listy, to wystarczy skorzystać z append na
tej liście przekazując ten element i on się tam po prostu znajdzie.
A więc mogę sobie wyszukać tej drugiej listy za pomocą takiego zapisu.
Nawet nie muszę w żadnej zmiennej ją
zapisywać i na niej skorzystamy z metody append i przekażemy tam li. Zobacz.
Po zapisaniu ten element znalazł się tutaj.
Czyli on tak naprawdę został wstawiony
tutaj na koniec, ale potem został wyciągnięty przeniesiony w inne miejsce.
A więc aby przenieść element gdzieś indziej, wystarczy, że po prostu wstawimy
go w inne miejsce na stronie i on się tam automatycznie znajdzie.
Jeżeli chodzi o inne metody, takie jak
append, to mamy jeszcze metodę prepend i ja je tutaj po prostu wpiszę i proszę
poeksperymentuj sobie z nimi prepend, before, after
i jeszcze jedna metoda, o której za moment
sobie powiemy, czyli do usuwania. Jak zadziała prepend?
Otóż append dodaje nam element na końcu, prepend doda go na początku.
Natomiast gdybyśmy skorzystali z before dodali byśmy element przed.
Czyli gdybym powiedział, że chcę przed tym ul dodać element li byłoby to tutaj
nie byłoby to poprawne, bo li powinno znajdować się w ul,
ale jeżeli właśnie tutaj zrobiłbym zamiast append zrobiłbym before
to można powiedzieć, że ten element li został by wstawiony tutaj.
Jeżeli zrobiłbym metodę after zostałby wstawiony tutaj.
Append wstawia go w środku na końcu, a prepend w środku na początku.
Więc jeżeli jakiś element div np.
chciałbyś umieścić przed tym elementem
list 1, to powiedziałbyś list 1 before i tam przekazał byś div.
Mam nadzieję, że to jest jasne, ale poeksperymentuj sobie z tym.
Natomiast na koniec chciałbym Ci pokazać,
że możemy również usuwać elementy z drzewa DOM i powiedzmy, że chcielibyśmy
na przykład ten element usunąć z tej pierwszej listy.
Zrobimy to w ten sposób.
Odwołamy się do tej listy pierwszej i w
niej wyszukamy za pomocą querySelector ostatniego elementu.
W CSS możemy podać to w ten sposób last-child to nam znajdzie ostatni element,
czyli będzie to ten element listy 1.5 I wystarczy, że na nim wywołamy metodę
remove. Więc na dowolnym elemencie, który znajduje się w drzewie DOM
jak wywołasz metodę remove, zostanie on z
tego drzewa usunięty, co mogłeś zobaczyć właśnie teraz.
I jeżeli chodzi o te metody jest jeszcze więcej takich starszych metod,
natomiast ja pokazałem Ci te nowe, które dobrze działają i które w zasadzie
wystarczą Ci do tego, aby w dowolne miejsce na stronie wstawić element
i jak widzisz również ten element usunąć.