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 i w kolejnej lekcji pomówimy sobie o tak
zwanych timera w języku JavaScript i pokażę Ci, jak możemy opóźnić wykonanie
jakiegoś kodu lub też sprawić, żeby ten kod był wykonywany cyklicznie.
Na początek utworzymy sobie funkcję, którą nazwę sayHello.
Będzie to bardzo prosta funkcja robiąca po prostu console.log
Witaj świecie
i chciałbym teraz wywołać tę funkcję po 3 sekundach.
Czyli wiemy, że jeżeli będzie się
wczytywać kod tej strony, wczyta się ten skrypt
funkcja zostanie utworzona,
jeszcze jej nie wywołałem, bo musiałbym to
zrobić w ten sposób i właśnie chcę ją wywołać dopiero za jakiś czas.
W języku JavaScript mamy do tego dwie funkcje.
Pierwszą pokażę Ci w tej lekcji, drugą w kolejnej,
natomiast chciałbym wspomnieć o tym, że te
funkcje nie są częścią specyfikacji języka JavaScript, ale są dostępne w środowisku
przeglądarki internetowej, a także w przypadku Node.js. Czyli w zasadzie praktycznie
wszędzie, gdzie można wykonywać kod JavaScript
te funkcje powinny być dostępne, ale same w sobie nie są częścią języka JavaScript.
I funkcja, o której chcę powiedzieć w tej lekcji jest to setTimeout.
Mówimy, że chcemy ustawić taki Timeout i
tu musimy przekazać funkcję, którą chcemy wywołać
po jakimś czasie. Więc przekażę referencje do sayHello.
I to jest bardzo ważne, że przekazujemy ją
w ten sposób, a nie wywołujemy jej, bo wtedy podstawili byśmy w to miejsce
to co ta funkcja zwraca.
Ta funkcja nic nie zwraca, więc podstawili byśmy tutaj undefined.
My natomiast chcemy wskazać na funkcję, która ma się wykonać,
natomiast jako drugi parametr podajemy
tutaj czas w milisekundach po jakim ma się wywołać ta funkcja.
Podam sobie 3000 jak 3 sekundy,
no i po przejściu na stronę ona się
odświeży i po trzech sekundach tutaj powinniśmy zobaczyć Witaj świecie,
I tak też się stało.
Oczywiście do tej funkcji możemy tutaj
podawać również funkcje bezpośrednio, bo to nie ma żadnego znaczenia.
W ten sposób utworzymy tutaj funkcję anonimową i podstawimy ją do setTimeout
lub funkcja może być utworzona wcześniej i przekazujemy do niej referencję.
Co ważne, Timeout można również czyścić,
czyli możemy powiedzieć, że chcemy wykonać tę funkcję za 3 sekundy, ale zanim ten
czas upłynie, możemy anulować taki Timeout tak, żeby on się nie wykonał.
I teraz jak to zrobić?
Mam na stronie taki przycisk Anuluj
timeout i jeszcze w tym kursie nie mówiliśmy o tym jak przypisywać zdarzenia
kliknięcia, ale zrobię to w najprostszy możliwy sposób, a później jeszcze w tym
kursie dokładnie Ci to wszystko wytłumaczę.
Więc na stronie mamy taki przycisk
identyfikatorem cancel i mogę się do niego odwołać poprzez document.querySelector
cancel i będę chciał do niego przypisać onclick funkcję, która się wykona.
Czyli ta funkcja się wykona w momencie kiedy klikniemy w ten przycisk.
I co będę chciał zrobić w tej funkcji?
Będę chciał anulować ten timeout.
Ale żeby móc go anulować musimy mieć do niego referencję.
I co ważne funkcja setTimeout zwraca nam taką referencję, taki uchwyt do tego
timeout, więc możemy sobie go zapisać w takiej stałej
i teraz pod timeout będzie się znajdowała właśnie taka referencja.
I teraz żeby taki timeout wyczyścić zanim on się zdąży wykonać
mamy do tego specjalną funkcję, która
nazywa się clearTimeout i jej musimy przekazać tą referencję.
Czyli przekazuję jej dokładnie to, co tutaj zostało zwrócone.
Zobaczmy jak to będzie wyglądać.
Strona się odświeżyła, jeżeli kliknę anuluj. OK, nie zdążyłem.
Zróbmy jeszcze raz.
Klikam Anuluj timeout i po trzech sekundach nic tutaj się nie wydarzyło.
Czyli anulowaliśmy wywołanie tej funkcji ustawione w tym miejscu.
To zatem tyle jeżeli chodzi o setTimeout.
To może być w wielu sytuacjach przydatne,
jak widzisz w ten sposób możemy opóźnić sobie
wykonanie jakiejś funkcji, ale także możemy taki timeout anulować.