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 możemy z
poziomu kodu JavaScript zapobiegać domyślnej akcji przeglądarki.
Teraz co może być domyślną akcją przeglądarki?
Jak mamy taki formularz jak tutaj
to po kliknięciu Wyślij
domyślną akcją przeglądarki jest wysłanie go do serwera.
Zauważ, że tutaj został taki ciąg dodany, czyli się wysłał.
Jak mamy link to domyślną akcją
przeglądarki będzie po prostu przejście pod ten link.
W tym przypadku mam tylko tutaj hash, więc jak kliknę to ten hash jest tutaj
dodawany. Ale po prostu została wykonana domyślna akcja przeglądarki.
Natomiast my chcemy czasami przechwycić
jakieś zdarzenie i powiedzieć, że w momencie jak ten formularz będzie wysyłany
to chcemy żeby on się nie wysłał, ale żebyśmy mogli wykonać naszą funkcję.
Bo jak on się wyśle to strona się przeładuje i nici z naszego kodu.
Zatem będę chciał się odwołać do tego formularza.
On się znajduje tutaj
i w momencie kiedy on będzie wysyłany chcemy przechwycić zdarzenie submit.
Pobrałem sobie go już tutaj do stałej i za
pomocą addEventListener dodamy mu zdarzenie submit.
Chcę wtedy wykonać funkcję, którą tutaj
podam, do niej otrzymam event i co ja będę chciał zrobić?
Otóż będę chciał tutaj powiedzieć event.preventDefault.
To jest metoda kolejna po takich metodach,
które Ci pokazałem jak stopPropagation czy stopImmediatePropagation.
To jest kolejna z metod, które pozwalają nam coś zrealizować z poziomu kodu
JavaScript. Więc w ten sposób możemy zapobiec domyślnej akcji przeglądarki.
Zobacz jeżeli teraz klikam Wyślij,
kompletnie nic się nie dzieje, a normalnie ten formularz zostałby wysłany.
Teraz, kiedy będziemy chcieli coś takiego zrobić. Wyobraź sobie, że będziemy chcieli
sprawdzić, zrobić taką mini walidację czy firstName to co jest tutaj, czy
wartość tego pola została wpisana. Jeśli została wpisana,
ok, niech formularz się wyśle.
W przeciwnym wypadku chcemy wyświetlić
błąd. Więc będziemy mogli się tutaj odwołać do event.currentTarget
i to będzie dokładnie to samo, co jakbyśmy tutaj napisali form, do którego mamy
odwołanie od góry, ale ja wolę robić to w taki dynamiczny sposób.
Czyli currentTarget już wiesz
odwołuje się do elementu, na którym pisaliśmy zdarzenie i w środku tego
formularza będę chciał sobie wyszukać pola, które ma name firstName.
Pokazywałem Ci już wcześniej, że możemy w
formularzach zrobić sobie to w formie takiej skróconej, czyli napisać firstName,
bo na formularzu wszystkie pola, które mają podane name
stają się od razu jego właściwościami. Więc firstName da nam odwołanie do tego pola.
I też już Ci pokazywałem, że value zwraca nam to co jest wpisane w polu.
Czyli jeżeli ktoś tam nic nie wpisał, więc porównam to do pustego ciągu znaków,
tylko wtedy chcę zrobić preventDefault właśnie w ten sposób.
W przeciwnym wypadku nie.
Tutaj jeżeli zrobię peventDefault to jeszcze chcę wyświetlić alert
Wpisz swoje imię. I zobacz co teraz się stanie.
Jeżeli nic nie jest wpisane, klikam Wyślij.
Zobaczymy alert Wpisz swoje imię,
formularz się nie wysłał.
Jeżeli cokolwiek tutaj wpiszemy, klikniemy wyślij,
strona się przeładowała i widać, że to
zostało tutaj podstawione, czyli wysłane razem z takim query string na serwer.
A więc możemy w ten sposób warunkowo zapobiegać domyślnej akcji przeglądarki.
Pokażę Ci jeszcze teraz jeden ciekawy przykład.
Wyszukamy sobie w naszym formularzu
pola, które ma firstName, czyli tego samego, ale zrobię to w inny sposób,
bo mógłbym się odwołać do firstName,
ale zrobię to inaczej, żeby Ci jeszcze bardziej uzmysłowić, że to jest
dokładnie to samo, że można to robić na różne sposoby.
Czyli chcę za pomocą querySelector
wyszukać sobie elementu z identyfikatorem firstName, a mamy tam taki element,
to jest dokładnie to samo pole i do niego będę chciał przypisać zdarzenie za pomocą
addEventListener i będzie to zdarzenie keypress.
To zdarzenie wywołuje się kiedy naciśniemy
dowolny przycisk klawiatury, w momencie kiedy go naciśniemy i puścimy
wtedy taka funkcja zostanie wykonana.
I po co Ci to pokazuję?
Po to, żebyś zobaczył, że można nawet
stworzyć takie pole, które nie będzie przyjmowało np.
literki a.
Bo jeżeli ja tutaj wpiszę a i puszczę, to
domyślną akcją przeglądarki w tym przypadku jest wpisanie tutaj a.
Natomiast możemy temu zapobiec
i zrobimy sobie takiego if i odwołamy się do tego globalnego obiektu
String i on ma taką metodę jak fromCharCode i przekażemy tutaj event.charCode.
Może zanim to zrobię, to jeszcze Ci
pokażę, żebyś wiedział z czym my tutaj mamy do czynienia.
Czyli zrobimy sobie event.charCode w ten sposób,
zobacz, i teraz jak pisałem a to mamy 97 jak pisze s to jest to 115 itd.
Czyli na tym obiekcie event można się
odwołać do czegoś takiego jak charCode, ale nie chcę tutaj porównywać czy ten charCode
to jest 97 bo nic mi to nie mówi jak patrzę na ten kod.
Dlatego chciałbym to porównać.
Czy ten charCode to jest literka a.
I metoda String.fromCharCode jak tutaj podamy to 97 zamieni nam to na a.
Czyli mogę w ten sposób sprawdzić
czy została wciśnięta literka a, zamiast porównywać czy CharCode równa się 97.
Jeżeli tak, zrobimy event.preventDefault.
Czyli w ten sposób nie pozwolimy wpisać tutaj literki a.
Zobacz, wciskam a,
musisz mi uwierzyć na słowo i nic się nie
da tutaj wpisać, ale każda inna literka już wchodzi.
Co za tym idzie możesz zobaczyć, że
domyślną akcją przeglądarki w tym przypadku było po prostu wstawienie tutaj
tego tekstu i nawet takiej domyślnej akcji przeglądarki możemy zapobiec.
Na koniec pokażę Ci jeszcze jeden życiowy przykład.
Otóż mamy tutaj taki link i on ma takiego hash message i po kliknięciu w ten link
jak widzisz ten hash jest tutaj dodawany, bo jest to domyślna akcja przeglądarki.
Natomiast chciałbym to przechwycić i wziąć sobie to message i na podstawie
tego co tutaj mam znaleźć element, który ma taki identyfikator on jest tutaj, on jest
ukryty za pomocą tych styli i chciałbym go pokazać.
Więc przypiszemy zdarzenie kliknięcia do tego linku za pomocą addEventListener click,
następnie funkcja i od razu chcę zapobiec domyślnej akcji przeglądarki.
OK, czyli już ten hash nie będzie dodawany
do adresu URL i teraz będę chciał na stronie znaleźć sobie element, który ma
taki identyfikator jak pobrany href. Więc najpierw sobie pobierzemy ten href
równa się event.currentTarget, czyli ten link, który kliknęliśmy getAttribute href,
pobraliśmy go sobie
i ja tutaj skomentuję, że my będziemy mieli coś takiego jak message.
Jak mamy coś takiego jak message to możemy
zrobić document.querySelector i wiesz, że to message
moglibyśmy tutaj podstawić, to nam znajdzie element z identyfikatorem
właśnie message.
To skoro ja to mam dynamicznie pobrane tutaj
w href, to po prostu to href tutaj podstawię.
Czyli w ten sposób znaleźliśmy odwołanie do tego elementu i żeby go pokazać
przypiszemy mu style display block, bo on tutaj ma display none.
Czyli jak już mam ten element, nie muszę
go w żadnej zmiennej zapisywać, odwołamy się do style,
to co już Ci pokazywałem w tym kursie
i następnie display równa się block.
Czyli tutaj zrealizowaliśmy ciekawe zadanie.
Najpierw jednak sprawdźmy jak to działa.
Klikam pokaż wiadomość i pokazała się ukryta wiadomość.
Nic nie zostało dodane tutaj.
I to jest fajny sposób na to, jak właśnie można do jakiegoś linku dodać sobie
zdarzenie kliknięcia, zapobiec domyślnej akcji przeglądarki i następnie np.
pobrać sobie ten href, na jego podstawie
wyszukać innego elementu i pokazać go na stronie.
Zapamiętaj zatem, że możesz w funkcji obsługi zdarzenia zapobiegać wielu
domyślnym akcją przeglądarki na bazie jakiegoś warunku.
Tutaj nie ma żadnego warunku, zawsze
zapobiegamy, a tutaj zrobiliśmy warunek, że tylko jak wciśniemy literkę a, to
chcemy nie pozwolić na wpisanie tej literki.