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 poruszymy tzw.
Browser Object Model API, czyli BOM
i tutaj będę chciał Ci pokazać kilka obiektów, które są dostępne na obiekcie
window, które można powiedzieć, że realizują pewne zadania związane ściśle z
przeglądarką internetową, natomiast nie z samym dokumentem.
Czyli to, co mamy tutaj to jest DOM, a
więc nie DOM API i też nie z samym językiem JavaScript,
który można powiedzieć, że jest taką osobną
specyfikacją. Więc te rzeczy, które Ci pokażę są związane z platformą, czy z
przeglądarką, gdzie ten kod jest uruchamiany.
I teraz pierwszym z obiektów, który będę chciał Ci pokazać jest Navigator i on jest
dostępny pod właśnie taką globalną zmienną navigator.
Natomiast ja w swoim kodzie zawsze lubię się do tego odwoływać poprzez window.navigator,
bo to mi znowu sugeruje, że ja na pewno sięgam po odpowiedni obiekt, a
nie po jakąś zmienną, którą ktoś w zasadzie gdzieś w kodzie
przez pomyłkę mógł tak samo nazwać.
Bo jeżeli byśmy sobie tutaj coś utworzyli i napisali navigator, coś tutaj przypisali,
a ja gdzieś w kodzie będę się do tego odwoływał, to oczywiście jest szansa, że
się odwołam do takiej przesłoniętej zmiennej.
Więc ja lubię sięgać sobie po te właśnie obiekty globalne z użyciem tego przedrostka
window, skoro one są na tym window zapisane.
Jeżeli jednak w konsoli przeglądarki z czymś eksperymentuję, to wpisuję
bezpośrednio navigator zamiast window.navigator.
I to już będzie zależeć od Twoich preferencji.
Jeżeli wciśniemy Enter, znowu będziemy
mogli sobie podejrzeć w konsoli, że sporo rzeczy tutaj się znajduje
na tym navigator i to będą i właściwości takie jak np.
appCodeName
i będą to jakieś metody.
Zauważ jakiś bluetooth, clipboart itd.
One będą zależne od tego, czy dana
przeglądarka wspiera jakieś nowe rzeczy, takie związane z bluetooth
powiedzmy, że będą działać we wszystkich najnowszych przeglądarkach, ale czasem
może być dodana jakaś nowość, która jeszcze nie wszędzie jest.
Niemniej jednak właśnie przez Navigator do
takich rzeczy się będzie można odwoływać, co pozwoli nam tworzyć aplikacje
internetowe, które mogą jak widzisz korzystać np.
w jakiś sposób z Bluetootha.
To musielibyśmy poczytać oczywiście specyfikacje czy dokumentację,
do czego to służy, jak to działa,
więc znowu nie czuj się tutaj jakby przytłoczony tym, że tego jest dużo,
ale zapamiętaj, że obiekt Navigator udostępnia nam
jeżeli chodzi o informacje to informacje o platformie.
I mamy tam np. coś takiego jak appName, appVersion
czy przede wszystkim coś, co jest bardzo, bardzo popularne czyli ciąg userAgent.
To jest taki ciąg, który z każdym
zapytaniami, jeżeli byśmy przeszli do panelu network i odświeżyli
to to zapytanie, które do serwera zostało wysłane, zobacz w nagłówkach zapytania
wysyła sobie coś takiego jak,
o to będzie tutaj Request Headers,
jak User-Agent gdzieś to tutaj powinniśmy znaleźć. I serwer na tej podstawie może
jakby odczytać sobie z jakiej przeglądarki przyszło zapytanie.
Więc to może odczytać serwer, ale również
my z poziomu języka JavaScript na navigator.userAgent możemy to odczytać
i jest to do naszego kodu zwracane jako string
taki JavaScript oczywiście no i z tego można pewne informacje sobie
wyciągnąć, szczególnie z użyciem wyrażeń regularnych.
To jest coś, z czego też korzysta bardzo
wiele bibliotek, które śledzą nasze ruchy na stronach internetowych takich jak np.
Google Analytics.
Na navigatorze jeszcze możemy sobie zobaczyć więcej innych ciekawych rzeczy.
Na przykład będziemy mieli taką właściwość jak online, która pozwoli Ci w kodzie
JavaScript sprawdzić, czy przeglądarka aktualnie jest w trybie online, czyli po
prostu czy ktoś ma połączenie z internetem.
Jak widzisz, to z kolei zwraca true. Czyli my się posługujemy językiem JavaScript,
ale samo to navigator i wszystkie te rzeczy, one nie są częścią języka JavaScript.
To jest tylko API, gdzie my za pomocą
języka JavaScript możemy sobie pewne rzeczy odczytywać.
Czyli w kodzie byśmy to po prostu odczytali, np.
w instrukcji if(window.navigator.onLine) i to nam zwraca true lub false i
możemy tutaj wykonać jakiś kod czy przeglądarka jest w trybie online czy nie.
Tak więc sporo tutaj rzeczy można znaleźć.
Można znaleźć też informację czy ktoś ma włączone ciasteczka,
gdzieś tutaj coś takiego powinno być cookieEnabled true itd.
Kolejnym ciekawym obiektem dostępnym globalnie jest obiekt screen i znowu można
się do niego odwołać przez window.screen albo samo screen.
To jest coś co jest super często
wykorzystywane przez właśnie skrypty śledzące nas w internecie do robienia
statystyk, czyli z jakich urządzeń korzystamy.
Zauważ, że tu z kolei można odczytać
właściwości takie jak wysokość ekranu czy dostępna szerokość.
Innymi słowy rozdzielczość ekranu
po prostu. Mamy tutaj również dostęp do
jak widzisz kolejnego obiektu wewnątrz, czyli orientation
i to oczywiście troszkę może się różnić w zależności od przeglądarek,
czy one wspierają jakieś rzeczy, które tutaj są czy nie.
Te rzeczy, które tutaj są będą działać we wszystkich nowych przeglądarkach,
ale tak jak mówię, czasami jest tak, że
coś tutaj znajdziesz, co działa w przeglądarce chrome, a na przykład jeszcze tego
nie ma w Firefoksie, jeżeli to będą jakoś super nowe rzeczy.
Ale zauważ, że właśnie przez obiekt Screen można się odwołać do takich rzeczy jak np.
height.
Więc znowu w naszym kodzie możemy powiedzieć screen.height i zostanie nam
zwrócony number, czyli wartość po prostu JavaScript, bo robimy to z poziomu
języka JavaScript i możemy z tą wartością sobie coś zrobić.
I jeszcze kolejnym bardzo przydatnym
obiektem, chociaż ich jest więcej jest obiekt location.
Znowu samo location albo window.location
i tutaj sobie możemy odczytać, może go wyświetlmy informacje na temat
można powiedzieć w dużym uproszczeniu paska adresu, ale nie tylko.
Mamy tutaj takie rzeczy jak np.
protocol http.
Możemy sobie to odczytać to nam zwróci taki
string i sprawdzi czy ktoś jest na bezpiecznym połączeniu czy nie,
mamy port, pathname, origin, href to będzie cały adres itd.
I co ciekawe jeżeli byśmy chcieli
przekierować na inną stronę to możemy powiedzieć location href, w dowolnym
miejscu w kodzie możesz zrobić coś takiego i powiedzieć np.
https://google.pl
i z poziomu języka JavaScript możemy przeładować stronę przechodząc na
google.pl.
Więc jeżeli w Twoim skrypcie będziesz miał gdzieś coś takiego, po kliknięciu np.
w jakiś przycisk wykonamy taką akcję
i jak widzisz przekieruje nas do google.pl.
Kolejną rzeczą, która jest ciekawa na tym
obiekcie location jest metoda reload dostępna tutaj.
Więc znowu możemy mieć na stronie przycisk, do
którego przypiszemy zdarzenie kliknięcia o tych zdarzeniach jeszcze w dalszej części
kursu i wywołamy funkcję, w której będziemy mieli taki zapis location.reload.
To sprawi, że po prostu przeładujemy stronę internetową.
W wielu sytuacjach może się to okazać przydatne.
Możesz wyświetlać jakąś informację, że np.
promocja się skończyła, przeładuj stronę.
Ja niedawno robiłem coś takiego, że
był licznik, który odliczał cenę promocyjną przy produkcie,
no i oczywiście mógł być taki przypadek, że ktoś wejdzie kiedy np.
będzie minuta do końca promocji.
Co zrobić w sytuacji kiedy ktoś ma tą
kartę otwartą w przeglądarce i dojdziemy z licznikiem do zera?
Zrobiliśmy tak, że wyświetlaliśmy po prostu
komunikat, że widoczna przez Ciebie cena już nie obowiązuje,
odśwież stronę, żeby zobaczyć aktualną cenę.
No i właśnie ten link odśwież stronę
miał przypisane zdarzenie, w którym robię location.reload, żeby ktoś mógł od razu
kliknąć i sobie przeładować stronę, a nie musiał klikać tutaj w przeglądarce.
Tak więc do wielu rzeczy może się to okazać bardzo przydatne.
Warto wiedzieć, że coś takiego jest.
To zatem tyle jeśli chodzi o te trzy takie najbardziej popularne obiekty, czyli
location, czyli obiekt, screen, a także navigator.
W trakcie tego, jak będziesz poznawał tworzenie stron internetowych od tej
strony właśnie JavaScript, to na pewno natkniesz się też na inne tego typu obiekty.
Nie musisz ich wszystkich znać, nie musisz o wszystkich wiedzieć.
Pamiętaj, że mamy globalny obiekt window, a pod nim są jeszcze inne obiekty, na
których znajdują się specyficzne dla przeglądarki akcje lub też informacje
i je właśnie nazywamy Browser Object Model.
Natomiast te, które będą specyficzne
wyłącznie dla tego drzewa DOM, gdzie będziemy już w kolejnych lekcjach
przeszukiwać te elementy, dodawać je, zmieniać ich atrybuty takie jak np.
class to to będzie DOM, czyli Document Object Model.
A jeszcze oprócz tego wszystkiego jest sam ten silnik wykonujący język JavaScript.