Úvodná » kódovanie » Animácia CSS3 - Vytvorenie výstupu Fan-Out s efektom odskoku pomocou Bezierovej krivky

    Animácia CSS3 - Vytvorenie výstupu Fan-Out s efektom odskoku pomocou Bezierovej krivky

    Vedeli ste, že geometrické transformácie pridané do elementov HTML s premeniťVlastnosť CSS, ako je mierka, skosenie a rotácia, môžete animovať? Môžu byť animované pomocou prechod majetok a @keyframes animácie, ale čo je ešte chladnejšie, je to, že animované transformácie môžu byť prijaté do zárezu s trochou pridania efekt odrazu, pomocou kubických Beziérových () funkcia časovania.

    Stručne, kubických Beziérových () (v CSS) je a časová funkcia pre prechody. Určuje rýchlosť prechodu a okrem iného sa dá zvyknúť vytvoriť efekt poskakovania v animáciách.

    V tomto príspevku najprv budeme vytvoriť jednoduchú transformačnú animáciu ku ktorému sme neskôr pridaj kubických Beziérových () funkcia časovania. Na konci tohto tutoriálu pochopíte, ako vytvoriť animáciu, ktorá používa ako fan-out, tak efekt odrazu. Tu je konečný výsledok (kliknite na efekt).

    Demo je inšpirované týmto prekrásnym Dribbble shot od Christophera Jonesa o animovanom mieste.

    IMAGE: Dribble
    1. Vytvorenie listov

    Tvar značky pozostáva z piatich (nazývame im) listy. Vytvoriť oválny tvar listu, použite border-radius Vlastnosť CSS. border-radius z jedného rohu je pozostáva z dvoch polomerov, horizontálne a vertikálne, ako je uvedené nižšie.

    IMAGE: W3C

    border-radius vlastnosť má mnoho rôznych syntaxov. Na tvar značky použijeme zložitejšie:

     okraj polomeru: htl htr hbr hbl / vtl vtr vbr vbl; 

    V tejto syntaxe sú horizontálne a vertikálne polia zoskupené; hod & proti predstavujú horizontálne a vertikálne polomery a T, l, b & r predstavujú horné, ľavé, spodné a pravé rohy. Napríklad, VBL znamená vertikálny polomer ľavého dolného rohu.

    Ak dáte iba jedna hodnota pre horizontálnu alebo vertikálnu stranu bude táto hodnota skopírovaná do všetkých ostatných horizontálnych alebo vertikálnych polomerov prehliadačom.

    na vytvorte vertikálny oválny tvar, udržujte horizontálne polomery na 50% pre všetky rohy a nastavte vertikálne, kým sa nezobrazí požadovaný tvar. horizontálna strana bude používať iba jednu hodnotu: 50%.

    vertikálne polomery horného ľavého a horného pravého rohu 30%, zatiaľ čo rohy v ľavom a pravom dolnom rohu použijú 70% hodnota.

    HTML

    CSS

    .pinStarLeaf šírka: 60px; výška: 120px; polomer okrajov: 50% / 30% 30% 70% 70%; farba pozadia: # B8F0F5; 
    OBRAZ: Tvar značky (vertikálne oválny)
    2. Vynásobenie listov

    Vzhľadom k tomu, značka bude fanúšikovia ukazuje päť listov, ktoré vytvoríme štyri ďalšie kópie listu v rôznych farbách as absolútnou polohou, aby sa navzájom stohovali.

    HTML

    CSS

    #pinStarWrapper šírka: 300px; výška: 300px; pozícia: relatívna;  .pinStarLeaf šírka: 60px; výška: 120px; poloha: absolútna; polomer okrajov: 50% / 30% 30% 70% 70%; vľavo: 0; doprava: 0; top: 0; dno: 0; marža: auto; opacita: .5; . pinStarLeaf: n-of-type (1) farba pozadia: # B8F0F5; . pinStarLeaf: n-of-type (2) farba pozadia: # 9CF3DC; . pinStarLeaf: n-of-type (3) farba pozadia: # 94F3B0; . pinStarLeaf: n-of-type (4) farba pozadia: # D2F8A1; . pinStarLeaf: n-of-type (5) farba pozadia: # F3EDA2;  
    3. Zachytenie udalosti kliknutia a zlepšenie estetiky

    Poďme pridajte začiarkavacie políčko s #pinStarCenterChkBox identifikátor na zachytenie udalosti kliknutia. Po začiarknutí políčka sa listy rozvinú (otáčajú). Musíme tiež pridať a biely kruh s #pinStarCenter identifikátor pre estetiku. Bude umiestnená na hornej strane značky a bude stredovým prvkom značky polohy.

    HTML

    Zaškrtávacie políčko umiestnime pred tým a biely kruh po listoch:

    CSS

    Najprv nastavíme základné štýly pre začiarkavacie políčko a krycí kruh:

     # pinStarCenter, #pinStarCenterChkBox šírka: 45px; výška: 50px; poloha: absolútna; vľavo: 0; doprava: 0; top: -60px; dno: 0; marža: auto; farba pozadia: #fff; polomer okrajov: 50%; kurzor: ukazovateľ;  #pinStarCenter, .pinStarLeaf pointer-events: žiadne;  #pinStarCenter> zadajte [typ = "začiarkavacie políčko]" šírka: 100%; výška: 100%; kurzor: ukazovateľ;  

    Každý list sa bude otáčať pozdĺž osi z v rôznych uhloch, musíme nastaviť transformovať: rotatez (); majetok zodpovedajúcim spôsobom vytvorte tvar hviezdy. Aplikujeme tiež prechod vlastnosť pre efekt rotácie (presnejšie používame prechod: transformácia 1s lineárna pravidlo pre listy).

     #pinStarCenterChkBox: začiarknuté ~ .pinStarLeaf prechod: transformácia 1s lineárna;  #pinStarCenterChkBox: začiarknuté ~ .pinStarLeaf: n-of-type (5) transform: rotatez (35deg);  #pinStarCenterChkBox: začiarknuté ~ .pinStarLeaf: n-of-type (4) transform: rotatez (105deg);  #pinStarCenterChkBox: začiarknuté ~ .pinStarLeaf: n-o-typ (3) transform: rotatez (180deg);  #pinStarCenterChkBox: začiarknuté ~ .pinStarLeaf: n-z typu (2) transform: rotatez (255deg);  #pinStarCenterChkBox: začiarknuté ~ .pinStarLeaf: n-z typu (1) transform: rotatez (325deg);  

    Ak sa pozriete na vyššie uvedený CSS, môžete vidieť z prítomnosti #pinStarCenterChkBox: začiarknuté ~ všeobecný výber súrodenca, ktorý pridáme iba prechod a premeniť vlastnosti keď je začiarknuté políčko (keď používateľ klikol na značku).

    4. Modifikácia stredu otáčania

    Predvolene je umiestnený stred otáčania v strede otočeného prvku, v našom prípade, v strede listov. Musíme presunúť stred transformácie na vnútorný koniec listov. Môžeme to urobiť pomocou transformácie-origin Vlastnosť CSS to mení polohu transformovaných prvkov.

    Ak chcete efekt rotácie fungovať správne, pridajte dve nasledujúce pravidlá do .pinStarLeaf selektor v našom súbore CSS:

     .pinStarLeaf transform-pôvod: 30px 30px; prechod: transformácia 1s lineárna;  

    Pozrime sa na našu fanúšikovú animáciu v akcii - v tomto momente, bez toho, aby sme mali ešte efekt odrazu. Kliknite na biely kruh, ktorý sa nachádza nad značkou.

    Pochopenie toho, ako funguje ubic-Bezier ()

    Ak chcete pridať efekt odrazu, musíme nahradiť lineárne časová funkcia s kubických Beziérových () v prechod v našom súbore CSS.

    Ale po prvé, chápeme to logika za kubických Beziérových () funkcia časovania takže môžete ľahko pochopiť efekt odrazu.

    Syntax pre kubických Beziérových () funkcia je nasledujúca, d a Tvzdialenosť a čas, a ich hodnoty sa zvyčajne pohybujú v rozmedzí od 0 do 1:

    kubic-bezier (t1, d1, t2, d2)

    Aj keď vysvetľuje CSS kubických Beziérových () z hľadiska vzdialenosti a času nie je presné, je to oveľa jednoduchšie pochopiť týmto spôsobom.

    Predpokladajme, že existuje krabice, ktorá sa presúva z bodu A do bodu B za 6 sekúnd. Použite nasledujúce kubických Beziérových () časová funkcia pre prechod s t1 = 0 a d1 = 1 hodnoty.

     / t1 = 0, d1 = 1, t2 = 0, d2 = 0 * / kubický bezier (0,1,0,0) 

    V takmer žiadnom okamihu sa krabica presunie z bodu A do stredu a zvyšok času dosiahne hodnotu B.

    Skúsme rovnaký prechod s hodnotami t1 = 1 a d1 = 0.

     / t1 = 1, d1 = 0, t2 = 0, d2 = 0 * / kubický bezier (1,0,0,0) 

    Počas prvých troch sekúnd sa box veľmi nehýbe a neskôr skoro skokom do stredu a začne sa postupne pohybovať smerom k B.

    Ako môžeš vidieť, d1 riadi vzdialenosť medzi A & v strednom bode, a t1 čas potrebný na dosiahnutie stredného bodu od bodu A.

    Použmeme to d2 a t2 Teraz. oba t1 a d1 bude 1 a t2 = 1 a d2 = 0.

     / t1 = 1, d1 = 1, t2 = 0, d2 = 1 * / kubický bezier (1,1,0,1) 

    Krabica sa pohybuje takmer do polovice za 3 sekundy (kvôli t1 = 1, d1 = 1) a v žiadnom momente neskočí na bod B.

    Posledný príklad vymieňa predchádzajúce hodnoty t2 a d2:

     / t1 = 1, d1 = 1, t2 = 1, d2 = 0 * / kubický bezier (1,1,1,0) 

    Krabica sa pohybuje takmer do polovice za 3 sekundy (kvôli t1 = 1, d1 = 1), potom ešte po dobu ďalších 3 sekúnd nepohybuje veľa pred skokom do bodu B.

    Tieto príklady ukazujú, že d2 a t2 kontrolujte vzdialenosť a čas, od ktorého je zaškrtnutá políčka prejdite od stredu do bodu B.

    Aj keď ste pravdepodobne nepotrebovali toto dlhé (ale riedke) vysvetlenie kubických Beziérových () v tomto bode si myslím, že vám pomôže lepšie pochopiť túto funkciu. Teraz, kde to všetko prináša odraz?

    5. Pridanie efektu Bounce s Cubic-Bezier ()

    kľúčové parametre pre efekt odrazu sú vzdialenosti, d1 a d2. d1 hodnota menej ako 1 vezme okienko za bod A predtým, než budete pokračovať smerom k B na začiatku animácie.

    d2 hodnota viac ako 1 vezme okienko za bod B predtým, ako sa vrátite k odpočinku na B na konci animácie. Z tohto dôvodu je efekt odrazu a dozadu.

    Teraz pridám kubických Beziérových () hodnoty priamo na naše demo namiesto pôvodného lineárne hodnota prechod majetok a umožňujú vám vidieť výsledky.

     #pinStarCenterChkBox: začiarknuté ~ .pinStarLeaf prechod: transformácia 1s cubic-bezier (.8, - .5, .2,1.4);  

    Tu je konečný výsledok, animácia fan-out CSS s efektom odchodov:

    Pre porovnanie a lepšie pochopenie efektu odrazu, ako je to kubických Beziérových () hodnota animácie sa správa, keď sa použije v našom príklade: