10. diel - Priebehy animácií elementov
V predchádzajúcej lekcii, Animácie efektov pri interakcii s elementmi (tooltip) , sme si ukázali, ako sa dajú meniť elementy, keď je používateľ napríklad prekryje kurzorom myši.
Vitajte u ďalšej lekcie ohľadom animácií v CSS3, v ktorej si ukážeme priebehy animácií.
V tejto lekcii sa naučíme nasledujúce priebehy animácií:
Typy priebehu funkcie
V tejto lekcii pre nás bude dôležitá znalosť matematiky, a to konkrétne priebeh funkcií. Ako sme si už ukázali v predchádzajúcich lekciách, zmeny a animácie elementov na stránke môžu mať určité priebehy. Buď sa vykonajú okamžite, alebo s nejakým časovým priebehom. Teraz sa pozrieme na všetky spôsoby nastavenie časových priebehov funkcií, ktoré nám CSS3 umožňuje:
linear- Animácia prebieha rovnako rýchlo v každom časovom okamihu.ease- Animácia prebieha na začiatku pomaly, potom rýchlo a na koniec znovu pomaly (predvolená nastavená animácia).ease-in- Animácia prebieha zo začiatku pomaly a potom rýchlo.ease-out- Animácia prebieha rýchlo a ku koncu pomaly.ease-in-out- Animácia prebieha na začiatku i na konci pomaly (je pomalší akoease).step-start- Animácia prebieha skokom, a potom končí na začiatku priebehu (rovnako akosteps(1, start)).step-end- Animácia prebieha skokom a potom končí na konci priebehu (rovnako akosteps(1, end)).steps(n, start/end)- Animácie prebieha po krokoch, a potom končí buď na začiatku alebo konci priebehu.cubic-bezier(n, n, n, n)- Animácie spojitá v čase s tým, že používateľ definuje vlastné hodnoty pre funkciu (môžu byť od0do1).initial- Animácie sa nastaví na predvolenú hodnotu (ease).inherit- Animácie sa nastaví podľa hodnoty nadradeného elementu.
Aby sme si ich všetky názorne ukázali, vytvoríme si stránku s farebným kruhom:
<div class="title">Průběh animace</div> <br> <br> <div class="kruh"></div>
V CSS nastylujeme opis a vytvoríme kruh pomocou vlastnosti
border-radius:
body { display: flex; justify-content: center; align-items: center; flex-direction: column; } .title { text-transform: uppercase; font-family: 'Calibri', sans-serif; font-weight: bold; } .kruh { width: 70px; height: 70px; background-color: blue; border-radius: 100%; }
Máme teda zatiaľ toto:
linear
Ako sme si už popísali, priebeh tejto funkcie je v každom jej časovom
úseku rovnako rýchly. Vytvoríme si teda ešte triedu
.animation:
<div class="title">Průběh animace - Linear</div> <br> <br> <div class="kruh animation"></div>
K triede si vytvoríme ešte keyframes animace. Tú potom
pridáme k nášmu kruhu:
.animation { animation: 5s animace linear infinite; } @keyframes animace { 0%{margin-left: -700px;} 50%{margin-left: 700px;} 100%{margin-left: -700px;} }
Vo výsledku máme tento priebeh:
ease
Ako už sme spomenuli v tabuľke na začiatku článku, toto je
prednastavený priebeh všetkých animácií. Zo začiatku sa element mení
pomaly, potom rýchlo a na konci opäť pomaly. Upravíme našu triedu
.animation, a to tak, že jej vo vlastnosti animation
nastavíme miesto linear hodnotu ease:
.animation { animation: 5s animace ease infinite; }
V HTML pozmeníme len nadpis animácie, inak bude HTML vždy totožné:
ease-in
Animácie s pomalým priebehom na začiatku a rýchlym priebehom na konci.
Opäť vykonáme potrebné úpravy našej triedy .animation:
.animation { animation: 5s animace ease-in infinite; }
HTML je teda totožné a ako výsledok budeme mať toto:
ease-out
Obrátený priebeh oproti ease-in, za začiatku rýchly priebeh
a ku koncu pomalý:
.animation { animation: 5s animace ease-out infinite; }
výsledok:
ease-in-out
Kombinácia priebehov ease-in a ease-out nám dáva
priebeh ease-in-out, čiže animáciu s pomalým začiatkom a
koncom:
.animation { animation: 5s animace ease-in-out infinite; }
ukážka:
step-start
Animácie s jednokrokovým priebehom na začiatku (viď. steps
nižšie):
.animation { animation: 5s animace step-start infinite; }
Ukážka priebehu:
step-end
Animácie s jednokrokovým priebehom na konci (viď. steps):
.animation { animation: 5s animace step-end infinite; }
Výsledok animácie:
steps
Táto animácia sa nastavuje pomocou dvoch parametrov, a to počtu krokov a
hodnoty start alebo end. Ak sa nastaví iba
počet krokov, prednastavená hodnota je end. Počet
nastavených krokov musí byť väčšia ako 0,
inak sa animácia nevykoná. Hodnota start označuje ľavú
spojitú funkciu, takže k prvému kroku dôjde, keď animácie začne. Hodnota
end naopak označuje pravú spojitú funkciu, takže posledný krok
sa vykoná akonáhle animácia skončí. Pre ukážku použijeme
steps(10, end):
.animation { animation: 5s animace steps(10, end) infinite; }
Ukážka priebehu steps:
cubic-bezier
Ako posledný priebeh si ukážeme cubic-bezier. Toto nastavenie
priebehu animácie je špecifické v tom, že užívateľ sám definuje
parametre. Parametre sú spolu 4. Prvý a posledný definujú počiatočný a
konečný čas priebehu (najčastejšie teda 0 pre začiatok
animácie a 1 pre koniec animácie). Druhý a tretí určujú
zrýchlenie zmeny v prvej polovici a druhej polovici. Pekne je to vidieť na
stránkach cubic-bezier.com:
.animation { animation: 5s animace cubic-bezier(1, -0.94, 0.09, 1.57) infinite; }
Ako posledný máme číslo 1.57. Povedali sme si, že hodnota
1 je koniec animácie, 1.57 je teda nadmieru (odíde z
bloku):
A to je všetko, teraz už vieme u našich animácií nastaviť akýkoľvek pohyb v čase. Pokiaľ nie je niečo jasné, všetky zobrazené ukážky si môžete stiahnuť v prílohe tejto lekcie:)
V ďalšej lekcii, Rotácia elementov , si ukážeme, ako možno otáčať elementy v 2D
a 3D priestore. Využijeme pri tom funkcie matrix(),
rotate() a skew().
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 514x (1.23 kB)
