Animating styles with RAF (Video Version)
-
0:01 - 0:04Wracamy do licznika Koleżki-O-Nie.
-
0:04 - 0:09A gdybyśmy chcieli, żeby Koleżka rósł
w miarę, jak licznik zbliża się do 0? -
0:09 - 0:13Wzmocnilibyśmy wrażenie
nadciągającej zagłady. -
0:13 - 0:14Jeden sposób
-
0:15 - 0:20- to animować style CSS tego obrazu
z pomocą "window.setInterval". -
0:20 - 0:25W pierwszej kolejności znajdę obraz
i przechowam go w zmiennej: -
0:25 - 0:30ohnoes =
document.getElementById("ohnoes"). -
0:32 - 0:36Określę styl początkowy, by zmiany
zaczynały się przy pewnej szerokości. -
0:36 - 0:39Będzie wiadomo,
od jakiej wielkości ma rosnąć. -
0:39 - 0:44A teraz napiszę funkcję
"makeItBigger", -
0:44 - 0:48która będzie odpowiedzialna
za powiększanie Koleżki. -
0:48 - 0:52Tutaj musimy zmienić "style.width":
-
0:53 - 0:59wziąć poprzednią szerokość
i dodać do niej 1. -
1:00 - 1:03W końcu przywołam "setInterval"
-
1:03 - 1:07w funkcji
"window.setInterval(makeItBigger)". -
1:07 - 1:12Jak bardzo ma urosnąć? Albo jak często
program ma powiększać Koleżkę? -
1:12 - 1:14Chcemy zrobić płynną animację.
-
1:14 - 1:19Zazwyczaj to od 24
do 60 klatek na sekundę. -
1:19 - 1:21Wypróbuję 30 klatek na sekundę.
-
1:21 - 1:24Napiszę: 1000 podzielić przez 30.
-
1:25 - 1:31Hm... To nie działa. Wiecie, dlaczego?
Sprawa jest skomplikowana. -
1:31 - 1:34Przejdźmy tutaj i zastanówmy się,
-
1:34 - 1:37jaka będzie wartość
-
1:37 - 1:41"ohnoes.style.width" po tej linii.
-
1:41 - 1:46Pewnie pomyśleliście,
że 50 pikseli przejdzie w 51 pikseli, -
1:46 - 1:50ale zobaczmy,
ile wynosi "ohnoes.style.width"... -
1:50 - 1:55Mamy tu "infoDiv", w którym możemy
to umieścić. To się równa... -
1:58 - 2:0050 pikseli, w porządku.
-
2:00 - 2:05Teraz spróbujmy
do tych 50 pikseli dodać 1. -
2:05 - 2:08Ile to jest, 50 pikseli plus 1?
-
2:08 - 2:10Pewnie powiecie, że 51 pikseli,
-
2:10 - 2:15ale JavaScript uważa zapis
"50 px" za ciąg znaków, -
2:16 - 2:20więc zobaczymy "50px1".
-
2:20 - 2:23A to nie ma sensu.
-
2:23 - 2:26Przeglądarka prawdopodobnie
ignoruje to, że próbujemy -
2:26 - 2:30przyporządkować własności
"szerokość" tę bezsensowną wartość. -
2:30 - 2:34Musimy przekonwertować
liczbę z jednostką -
2:34 - 2:36na samą liczbę,
-
2:36 - 2:38potem do tej liczby dodać 1
-
2:38 - 2:41i dopiero przywrócić piksele.
-
2:41 - 2:45Możemy to zrobić
za pomocą polecenia "parseFloat", -
2:45 - 2:47które przekształci ciąg w liczbę.
-
2:47 - 2:50Potem możemy otoczyć to wszystko
-
2:50 - 2:53i na końcu dodać "px".
-
2:53 - 2:58O! To działa! On rośnie! Tak!
-
2:58 - 3:01Już widzicie trudność
w animowaniu własności CSS. -
3:01 - 3:03Często mają przyklejone jednostki,
-
3:03 - 3:06więc trzeba je oddzielić...
Oj, rośnie! -
3:06 - 3:10Jednostkę trzeba oddzielić,
a potem dołączyć z powrotem. -
3:11 - 3:15No dobrze...
Staje się naprawdę przerażający! -
3:15 - 3:17Natkniemy się na więcej
przerażających rzeczy, -
3:17 - 3:21używając "setInterval"
do animacji właściwości CSS. -
3:21 - 3:24Po pierwsze, nie ma gwarancji,
-
3:24 - 3:28że przeglądarka będzie skrupulatnie
przestrzegać interwału. -
3:28 - 3:33Jeśli coś się stanie,
np. użytkownik będzie coś wpisywał, -
3:33 - 3:36to przeglądarka
może przywołać funkcję później. -
3:36 - 3:39I już nie będzie gładkiej animacji.
-
3:39 - 3:43Po drugie, przeglądarka przywoła funkcję
nawet gdy ta karta będzie ukryta. -
3:43 - 3:47Będzie więc marnować moc komputera.
-
3:48 - 3:52Dlatego w nowoczesnych
przeglądarkach jest już nowa funkcja, -
3:52 - 3:55zaprojektowana z myślą
o animacjach DOM-ów. -
3:55 - 3:59Nazywa się
"window.requestAnimationFrame". -
3:59 - 4:03Żeby jej użyć,
pozbędziemy się linii "setInterval" -
4:03 - 4:06i przywołamy
-
4:06 - 4:11"requestAnimationFrame"
z wnętrza funkcji. -
4:11 - 4:15Damy odniesienie
-
4:15 - 4:18do funkcji "makeItBigger".
-
4:19 - 4:22A potem po prostu przywołamy
"makeItBigger" -
4:22 - 4:24podczas ładowania strony.
-
4:25 - 4:27"MakeItBigger"...
-
4:27 - 4:30O! Okej, on rośnie i to szybko!
-
4:30 - 4:34Przeglądarka
przywołuje "makeItBigger" -
4:34 - 4:36tuż przed odświeżeniem,
-
4:36 - 4:40z prędkością 60 klatek na sekundę
- dwa razy większą niż poprzednio. -
4:40 - 4:43Za każdym razem
do szerokości dodajemy 1 piksel. -
4:43 - 4:48Policzmy, przecież dobrze to umiemy.
Dodajemy 60 pikseli na sekundę. -
4:48 - 4:52W parę sekund Koleżka
przerasta stronę. Już go nie widać. -
4:53 - 4:56Jak spowolnić naszą animację?
-
4:56 - 4:57Jest kilka sposobów.
-
4:57 - 5:01Lubię ten, gdy program
obserwuje, ile czasu upłynęło -
5:01 - 5:05i na tej podstawie
oblicza nową szerokość. -
5:05 - 5:09Najpierw trzeba zapamiętać
czas początkowy, w milisekundach. -
5:09 - 5:13Jeszcze zanim funkcja
zostanie przywołana. "var startTime"... -
5:13 - 5:17Oj, znowu rośnie.
"new Date().getTime()". -
5:17 - 5:20I wewnątrz "makeItBigger"
przechowujemy czas bieżący: -
5:21 - 5:27"var currTime = new Date().getTime()".
-
5:27 - 5:30Dla wygody ustalmy,
że Koleżka ma rosnąć -
5:30 - 5:34o 30 pikseli na sekundę,
zaczynając od 50 pikseli. -
5:34 - 5:37Obliczmy to więc:
-
5:37 - 5:42"newWidth = 50"
-
5:43 - 5:44- to nasza szerokość wyjściowa
-
5:45 - 5:49plus "currentTime minus startTime".
-
5:49 - 5:53To w milisekundach,
więc podzielimy przez tysiąc. -
5:53 - 5:57A potem mnożymy przez 30.
-
5:57 - 6:01Bo chcemy, żeby Koleżka
rósł o 30 pikseli na sekundę. -
6:01 - 6:05To nowa szerokość - "newWidth".
Teraz przypiszmy -
6:05 - 6:07elementowi "style.width"
-
6:07 - 6:10wartość "newWidth".
-
6:10 - 6:14..."newWidth"... ach, wreszcie!
-
6:14 - 6:19I mamy płynną animację:
30 pikseli na sekundę. -
6:20 - 6:22Możemy zmienić tę liczbę,
-
6:22 - 6:26jeśli chcemy,
by Koleżka rósł wolniej lub... -
6:26 - 6:28szybciej.
-
6:31 - 6:34A gdyby tak zatrzymać animację,
gdy Koleżka będzie za duży? -
6:35 - 6:38Możemy otoczyć tę linię
warunkiem "if"... -
6:38 - 6:43Tę linię... i robić to tylko wtedy,
gdy bieżąca szerokość -
6:43 - 6:48jest mniejsza
od danej liczby, np. 300. -
6:48 - 6:50Wypróbujmy to.
-
6:51 - 6:52Dobrze.
-
6:53 - 6:55A teraz...
-
6:55 - 6:58"CurrentWidth" wynosi...
Nie, "newWidth". -
6:59 - 7:01Dobrze.
Powiedzmy, że jeśli wyniesie 300... -
7:04 - 7:07Dalej, Koleżko, dasz radę!
-
7:07 - 7:09Pięknie.
-
7:09 - 7:13Ta metoda używania
"requestAnimationFrame" -
7:13 - 7:18powinna się sprawdzać, jeśli użytkownik
korzysta z Chrome, Firefox lub IE10+. -
7:19 - 7:22Są biblioteki
i podkładki programowe JavaScript, -
7:22 - 7:25używające "requestAnimationFrame",
gdy jest to możliwe, -
7:25 - 7:30albo, w starszych przeglądarkach,
stosują "setInterval". -
7:30 - 7:32Tak to jest przy projektowaniu stron:
-
7:33 - 7:37strona zmienia się cały czas,
przeglądarki dodają nowe opcje, -
7:37 - 7:40projektanci odkrywają
nowe sposoby ich używania... -
7:40 - 7:44Musicie stale dowiadywać się,
co jest nowe -
7:44 - 7:47i co najlepiej nadaje się
do waszych celów.
- Title:
- Animating styles with RAF (Video Version)
- Description:
-
This is a video recording of a talk-through, uploaded to make it easier to create subtitles.
Please watch the original interactive talk-through on Khan Academy, where you can pause and edit the code
and see the code in better resolution:
http://www.khanacademy.org/computer-programming - Video Language:
- English, British
- Duration:
- 07:48
Lech Mankiewicz edited Polish subtitles for Animating styles with RAF (Video Version) |