od Podstaw
10 godz. 55 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJeśli poznałeś już wymienione wyżej technologie, to zapewne zdajesz sobie sprawę z ich ograniczeń. Za pomocą języka HTML tworzymy bowiem strukturę dokumentu, dodajemy treść tekstową, obrazy czy wideo. Aby jednak strona internetowa wyglądała perfekcyjnie, korzystamy z arkuszy stylów CSS, które pozwalają nam opisać wygląd wszystkich elementów HTML, ustawić wielkość tekstu czy dodać tło strony. No właśnie, ale gdzie tutaj interakcyjność?Zapewne już wiesz, że język CSS oferuje tzw. pseudoklasy, które pozwalają nam np. przypisać zmianę koloru elementu po najechaniu na niego kursorem myszy. I to tak naprawdę wszystko, na co możemy zareagować. A co gdybyśmy chcieli po wciśnięciu jakiegoś przycisku wysunąć ukryty panel, sprawdzić poprawność wypełnianego właśnie formularza lub pobrać dane z serwera i wyświetlić je na stronie bez przeładowywania witryny? Dobra wiadomość jest taka, że to wszystko jest możliwe z użyciem języka JavaScript, który “rozumie” każda przeglądarka internetowa.Choć język JavaScript powstał jako język skryptowy na potrzeby stron internetowych, to już dawno temu “wyszedł” z przeglądarek internetowych i może być używany tak naprawdę gdziekolwiek. W kursie, który masz przed sobą, poznasz język JavaScript jako niezależny język programowania, a dopiero później dowiesz się, jak wykorzystywać go do wzbogacania stron internetowych. Dzięki postawieniu grubej linii pomiędzy samym językiem, a Obiektowym Modelem Dokumentu dostępnym w przeglądarkach internetowych, będziesz nie tylko bardzo dobrze rozumiał sam język, ale w przyszłości wykorzystasz go do innych zastosowań.Na początku omówimy ciekawą historię języka JavaScript, a chwilę później rozpoczniemy poznawanie najważniejszych jego konstrukcji. I tak dowiesz się czym są zmienne, jakie typy danych dostępne są w tym języku, czym są liczne operatory, instrukcje warunkowe, pętle, tablice, obiekty i funkcje. Wszystkie te zagadnienia są bardzo podobne w innych językach programowania, dlatego kurs ten jest również świetnym wstępem do programowania w ogóle. Każda z przedstawianych konstrukcji języka jest bardzo dokładnie tłumaczona z myślą osobach początkujących. Nie zmienia to jednak faktu, że nawet osoby znające już podstawy języka JavaScript znajdą tutaj coś dla siebie, gdyż na każdym etapie przedstawiane są również liczne ciekawostki odnośnie danej konstrukcji.Kiedy zrozumiesz już jak działa język JavaScript, przejdziemy do drugiej połowy kursu, gdzie dokładnie omówimy Obiektowy Model Dokumentu, dostępny w przeglądarkach internetowych. Zobaczysz jak przeglądarka tworzy z kodu HTML drzewo dokumentu, jak reprezentowane są poszczególne jego węzły, a także jak język JavaScript potrafi z tym “wewnętrznym światem” współpracować. Dowiesz się jak wyszukiwać na stronie interesujących nas elementów HTML, a także jak tworzyć nowe elementy, przypisywać im treść i wstawiać je na stronę. Popracujemy również z atrybutami elementów, ich klasami i wreszcie ze stylami CSS, abyśmy mogli wpływać dynamicznie na wygląd naszej strony.Zobaczysz również, jak możemy w dowolnym momencie odczytać współrzędne położenia elementu na stronie, a także jego wysokość czy szerokość. Tę wiedzę wykorzystamy później w praktycznym przykładzie.Jeden z rozdziałów kursu poświęcony został zdarzeniom, a więc możliwości reagowania na zachowania użytkownika. Dzięki temu zobaczysz, jak możemy przypisać np. zdarzenie kliknięcia do wybranego elementu, a kiedy zostanie on kliknięty, wykona się przygotowany przez nas kod. Poznasz kilka różnych sposobów na przypisywanie oraz usuwanie zdarzeń, a także dowiesz się czym jest tzw. “bubbling” oraz “capturing” czy jak zablokować domyślną akcję przeglądarki.Przy pisaniu jakiegokolwiek kodu, zawsze pojawiają się błędy, dlatego i tutaj Twoje wątpliwości nie pozostaną bez odpowiedzi. Poznasz wszystkie typu błędów, które mogą się pojawić podczas wykonywania naszego kodu, a także wiele sposobów ich wykrycia i wyeliminowania.W kursie nie brakuje oczywiście praktycznych przykładów, które celowo zostały ułożone tak, aby wykorzystać w nich jak najwięcej zdobytej wcześniej wiedzy. Nie zostaniesz więc sam z poczuciem, że co prawda rozumiesz jak działa dana konstrukcja, ale nie masz pomysłu, kiedy z niej skorzystać. Na początek wykonamy praktyczny projekt losowania liczb z wybranego przedziału tak, aby nie mogły się powtórzyć. Już przy tym projekcie poznasz wiele ciekawych technik i sztuczek.Następnie przejdziemy do nieco bardziej zaawansowanego przykładu i napiszemy skrypt, który pozwoli nam sortować dane w tabeli po wybranych kolumnach, kiedy któraś z nich zostanie kliknięta. Zobaczysz jak sortować dane zarówno malejąco jak i rosnąco, a także jak zmieniać kolejność elementów HTML na stronie.W kolejnym projekcie zajmiemy się walidacją danych wpisywanych do formularza, by ten nie mógł zostać wysłany do serwera tak długo, jak zawiera jakiekolwiek błędy. Zobaczysz tutaj zdarzenia związane z polami formularza, a także sposoby na pobieranie z nich wartości i sprawdzanie czy są one poprawne. Zadbamy także o wrażenia użytkownika i wyświetlimy na stronie stosowne błędy, a także podświetlimy źle uzupełnione pola na czerwono.W przedostatnim projekcie wstawimy na stronę przycisk, który będzie się pojawiał po przewinięciu strony w dół, a znikał po odwrotnej akcji. Co jednak ciekawe, po jego kliknięciu, strona zostanie automatycznie, płynnie przewinięta do samej góry.W ostatnim projekcie stworzymy bardzo efektowny dymek z podpowiedzią, który będzie się pojawiał nad elementem po najechaniu na niego kursorem myszy. Wykorzystamy tutaj mnóstwo ciekawych technik. Dowiesz się również jak swój kod przygotować w taki sposób, abyś mógł go udostępnić innym osobom, by w łatwy sposób skorzystały z przygotowanego Tooltipa na swoich stronach.Kurs kończy się sekcją Tips & Tricks, w której znajdziesz 10 krótkich lekcji. W każdej z nich została omówiona jedna sztuczka. Każda z nich pozwoli Ci jeszcze lepiej zrozumieć język JavaScript, ale przede wszystkim zaoszczędzić czas i kilka linijek często niepotrzebnego kodu.Podsumowując, kurs ten jest nie tylko wprowadzeniem do samego języka JavaScript, ale także do Obiektowego Modelu Dokumentu. Dzięki wyraźnemu rozdzieleniu tych dwóch zagadnień, będziesz mógł w przyszłości wykorzystać język JavaScript także do innych zastosowań, poza przeglądarką internetową.
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 czy programowania nie jest wymagana, gdyż wszystkie konstrukcje są starannie tłumaczone. 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, z kursem JavaScript w Praktyce, który powstał jako dopełnienie tego kursu i porusza nieco bardziej zaawansowane tematy, na które tutaj zabrakło już czasu.
W tej lekcji odpowiemy sobie na pytanie czym są zdarzenia, a jest to rzecz niezwykle ciekawa
w obiektowym modelu dokumentu. Wyobraź sobie, że mamy przeglądarkę, w której mamy jakieś dwa obrazki i normalnie
w CSS wiesz, że możemy zarejestrować
taką pseudo klasę jak hoover, czyli po najechaniu na jakiś element, możemy zmienić np. jego kolor. Natomiast
to jest wszystko co możemy zrobić w CSS, nie możemy zarejestrować zdarzenia pod tytułem - kiedy klikniemy
na ten obrazek, to
chcemy, żeby wykonała się jakaś funkcja w JavaScript'cie. Prawda więc, do tego właśnie jest nam kod JavaScript
potrzebny oraz obiektowy model dokumentu, który dla obiektów udostępnia zdarzenia i teraz wyobraź sobie,
że klikamy na ten obrazek i pojawia się jakiś większy obrazek, czyli po prostu stworzyliśmy jakąś galerię,
gdzie po kliknięciu na jeden obrazek pojawia się jakiś inny.
Nie jest możliwe zrobienie czegoś takiego w samym HTML'u i CSS'ie bez użycia JavaScriptu, a zdarzenia nam
w tym pomagają i w tym momencie obsłużyliśmy zdarzenie
click, o którym jeszcze będziemy mówić.
Teraz chciałbym Ci przedstawić kilka grup, z rodzajami zdarzeń, na które możemy reagować w przeglądarce.
Zdarzeń jest bardzo wiele i część z nich jest od razu dostępne w przeglądarce.
Część z nich pochodzi z różnych obiektów jak np. AJAX,
czyli możemy wysyłać jakieś zapytania.
Kiedy dostajemy odpowiedź, pewne zdarzenia są odpalane itd. Więc cała masa jest zdarzeń i wystarczy, że
zrozumiesz jak zdarzenia działają, jak na nie reagować i nie musisz ich wszystkich znać,
natomiast w przyszłości będziesz wiedział, czytając dokumentację jakiegoś kolejnego obiektu, jak zdarzenie
zarejestrować i co możemy z nim zrobić, więc mamy kilka grup.
Na początek jest to user interface events, więc są to zdarzenia przypisywane do obiektu window i są to zdarzenia
takie jak load, unload, resize czy scroll.
Jeżeli chodzi o load, to zdarzenie się wykona, kiedy cała treść, wszystkie obrazki zostaną pobrane na naszej
stronie, unload wówczas kiedy ze strony będziemy chcieli wyjść, resize, wtedy kiedy okno przeglądarki będziemy
skalować czy scroll wtedy, kiedy będziemy scrollować okno.
Następnie mamy coś takiego jak document.events i te zdarzenia będziemy rejestrować z kolei na dokumencie.
Jest to na przykład readystatechange.
O nim jeszcze powiemy, DOMContentLoaded.
Następnie jest to form events, nie będę tutaj tłumaczył wszystkich tych zdarzeń, ja ci je zamieszcza w PDF'ie,
również z opisami. Form events są to zdarzenia, które na formularzach lub też polach formularza są wywoływane
np. change, kiedy zmienimy coś w jakimś polu, select, kiedy wybierzemy jakąś wartość z listy select np. submit,
kiedy chcemy wysłać formularz.
Czyli możemy przechwycić zdarzenie, kiedy ktoś wciśnie wyślij formularz i możemy coś zrobić.
Również możemy zapobiec temu, aby formularz został wysłany. Następnie np. reset i takie zdarzenie jest
wywoływane, kiedy chcemy zresetować pole formularza odpowiednim przyciskiem.
Następnie mamy focus events, taka grupa i również na polach formularza mogą być takie zdarzenia wywoływane
takie jak blur czy np. focus.
Następnie mamy mouse events, bardzo popularna grupa i tutaj możemy mieć np. click, o którym już mówiłem. Na
dowolnym elemencie, możemy zarejestrować zdarzenie kliknięcia i kiedy ktoś kliknie ten element,
to funkcja, którą przepiszemy się wykona.
Może to być również dblclick, czyli podwójne kliknięcie.
Może to być mousedown, czyli wciśnięcie przycisku, może być mouseup, czyli zdarzenie, które wywoła się kiedy
przycisk podniesiemy i np. mousenter, kiedy najedziemy na jakiś element.
Podobnie jak w przypadku pseudoklasy hoover w CSS czy np. mouse leave, mamy również takie zdarzenia, jak
mouse over czy mouse move, kiedy ruszamy myszą nad jakimś elementem.
Jak widzisz, jest bardzo wiele tych zdarzeń, natomiast mamy tutaj jeszcze jedną grupę, czyli keyboards events,
zdarzenia są związane właśnie z wciśnieniem klawiszy na klawiaturze np. keydown.
Kiedy będziemy coś wpisywać w jakimś formularzu to na polu będziemy mogli zarejestrować zdarzenie keydown, które
się wykona za każdym razem, kiedy jakiś przycisk zostanie wciśnięty, keyup
kiedy puścimy ten przycisk, keypress, w ogóle, kiedy wciśniemy taki przycisk.
I teraz, co jest bardzo ważne, pokazałem ci bardzo wiele różnych zdarzeń.
To nie są wszystkie, ale te najpopularniejsze. Kiedy zarejestrujemy na jakimś elemencie zdarzenie to oznacza,
że po kliknięciu na przykład na taki element, wykona się nasza funkcja, ale do tej funkcji otrzymamy również
obiekt, w którym będą informacje o zdarzeniu.
Jest bardzo, bardzo ważne i wśród tych informacji będziemy mogli znaleźć np. target, czyli element, na
którym takie zdarzenie zostało wykonane.
Na przykład współrzędne myszy, czyli jeżeli klikniemy to będziemy mogli otrzymać współrzędne x oraz y,
gdzie kursor myszy się na naszej stronie znajdował.
Może to być np. wciśnięty klawisz, więc możemy zapytać czy podczas kliknięcia myszy, powiedzmy, był wciśnięty
klawisz SHIFT, będziemy mogli to sprawdzić.
Będziemy mogli sprawdzić ilość pobranych danych, to w przypadku zdarzenia, kiedy będziemy z serwera za
pomocą AJAX'a np. coś pobierać, to również będzie takie zdarzenie, które się będzie odpalać i co jakiś
czas będziemy mogli sprawdzać ilość już pobranych danych.
Czy np. poprzednią wartość, to jest w przypadku np. Local Storage.
Jest to taka baza danych po stronie klienta, która jest dostępna
w HTML5.
Ja to w jednym z kursów na eduweb.pl omawiam i kiedy tam zmienimy jakąś wartość,
to jest odpalane odpowiednie zdarzenie, na które możemy zareagować i np. poprzednią wartość tam możemy
znaleźć.
To są tylko przykładowe informacje o zdarzeniu.
Natomiast mam nadzieję, że koncepcje załapałeś.
Możemy zarejestrować jakieś zdarzenie na konkretnym elemencie np. kliknięcie.
I kiedy ktoś kliknie na ten element, zdarzenie się odpali.
Możemy wykonać naszą funkcję, a dodatkowo otrzymamy obiekt, w którym będzie bardzo wiele różnych informacji,
z których będziemy korzystać.