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 porozmawiamy o capturing
a jest to proces można powiedzieć odwrotny do bubbling.
I teraz co będziemy chcieli zrobić?
Mamy już taki kod jak widziałeś
poprzednio, czyli rejestruje sobie zdarzenie kliknięcia w przycisk i w body.
I teraz, w przypadku bubbling jeżeli ja
kliknę sobie w przycisk, to mamy Kliknąłeś w przycisk i Kliknąłeś na body.
Bo klikając ten przycisk klikam też w całe body.
Ale kolejność jest taka, że najpierw mamy
tutaj Kliknąłeś w przycisk, a potem Kliknąłeś w body.
Jeżeli natomiast kliknę gdzieś poza
przyciskiem, oczywiście najpierw będzie Kliknąłeś w body.
Czyli to już wiesz. To jest bubbling.
A więc klikając w przycisk rejestrujemy czy
wywołujemy zdarzenie kliknięcia na wszystkich jego rodzicach, w tym na body.
Natomiast przy przypisywaniu poprzez addEventListener jakiejś funkcji obsługi
zdarzenia pokazywałem Ci, że trzeci parametr można ustawić na true lub false.
Jeżeli nic nie podamy to domyślnie będzie
to false i jeżeli podamy false to dokładnie tak samo to będzie działać.
Ale tutaj możemy podać true i ten parametr nazywa się useCapture.
Czyli czy ma być to wywołane w momencie capturing?
I teraz czym jest capturing?
Otóż okazuje się, że w momencie jak klikam na ten przycisk to to nie jest tak, że na
nim jest wywoływane zdarzenie kliknięcia od razu i bubbluje to w górę.
Najpierw mamy fazę capturingu, czyli od
samej góry schodzimy w dół po wszystkich elementach, docieramy do przycisku,
wywołujemy jego funkcję i rozpoczyna się bubbling.
I domyślnie właśnie w tej fazie bubblingu wywoła się zdarzenie przypisane do body.
Ale jeżeli rejestrując kliknięcie na body od razu powiemy, że chcemy wykonać tę
funkcję w fazie capturing, to ona zostanie wywołana, kiedy właśnie będziemy jakby
na początku schodzili w dół do tego przycisku.
Czyli jak dam to na false albo to pominę
jeszcze raz zobaczmy co się pojawi w konsoli.
Klikam w przycisk i mam najpierw Kliknąłeś w przycisk,
potem Kliknąłeś w body.
Jeżeli przestawię to na true, zobacz co się stanie jak kliknę w przycisk.
Najpierw mamy Kliknąłeś w body, a potem mamy Kliknąłeś w przycisk.
Czyli za pomocą tego parametru możesz powiedzieć, że zdarzenie kliknięcia ma być
tutaj wywołane w fazie capturing i to czasami może się okazać przydatne.
I teraz przede wszystkim, kiedy może to
się okazać przydatne. Ja Ci pokazałem w przypadku w bubblingu, że możemy zrobić coś
takiego jak stopPropagation, więc na razie to jeszcze usuńmy.
I chodziło o to, że po kliknięciu w
przycisk nie chcę wywoływać zdarzenia kliknięcia w body.
Wystarczyło tutaj na evencie zrobić stopPropagation.
No bo skoro podczas właśnie
bubblingu czyli tej propagacji jest wywoływane zdarzenie na body to to wystarczyło i
teraz już na body to nie jest wywoływane. Bo capturing schodzi w dół,
dochodzimy do button, klikamy i zaczynamy bubbling do góry.
Ale skoro zabiliśmy stopPropagation to ten bubbling jest przerywany.
Jeżeli natomiast tutaj powiem true mówiąc, że
chcę tę funkcję wywołać w fazie capturing to wygląda to już inaczej.
Zobacz, że wtedy
ten stopPropagation nic nie daje jeżeli chodzi o tę funkcję.
Oczywiście mogą tu być jeszcze inne
funkcje, ale dla tej funkcji nie ma to wtedy żadnego znaczenia.
Dlatego, że już w fazie capturingu, kiedy
schodzimy w dół, dochodzimy do body, wywołujemy tę funkcję,
potem schodzimy do button, na nim jest wywoływany stopPropagation, czyli
przerywamy i nie idziemy do góry z bubblingiem. Ale już podczas capturing
ta funkcja na body została wykonana.
Czyli innymi słowy może być tak, że chcesz przypisać zdarzenie kliknięcia np.
do body i chcesz mieć pewność, że nigdzie indziej, w żadnym kodzie Twoim lub cudzym
nie będzie to zdarzenie przerwane przez to, że ktoś zrobił stopPropagation.
I w ten sposób masz pewność, że właśnie zawsze Twoja funkcja zostanie wywołana.
Zobacz co by było, gdybyśmy do body przypisali
jeszcze jedno zdarzenie kliknięcia i napiszemy
Kliknąłeś w body ponownie, ale tym razem przypiszemy je w taki standardowy sposób.
Zobacz.
Klikam i mamy Kliknąłeś
w body i Kliknąłeś w przycisk. Nie mamy Kliknąłeś w body ponownie
bo właśnie to byłoby wywołane w tej fazie bubbling, a zrobiliśmy stopPropagation.
Natomiast jeżeli to wykomentuje,
zobaczmy, klikam w przycisk mamy, Kliknąłeś w body,
to się wykonało w fazie capturing,
czyli to jest ta pierwsza funkcja,
potem doszliśmy do przycisku i następnie
rozpoczął się bubbling i dopiero wtedy wywołało się Kliknąłeś w body ponownie.
Mam zatem nadzieję, że rozumiesz w jaki sposób to działa.
Podsumowując, jeżeli chcesz przypisać zdarzenie, które będzie wywoływane zawsze
i nie będzie zatrzymywane przez stopPropagation, dodaj tutaj sobie true w tym parametrze,
ale zapewniam Cię, że 99 na 100 razy, a
może nawet częściej będziesz tutaj wpisywał false albo po prostu pomijał ten
parametr i w taki zwykły sposób przypisywał np.
zdarzenia kliknięcia do elementu.