Koduleht » Kodeerimine » CSS3-animatsioon - ventilaatori väljavõtte tegemine põrgutugevusega, kasutades Bezier-kõverat

    CSS3-animatsioon - ventilaatori väljavõtte tegemine põrgutugevusega, kasutades Bezier-kõverat

    Kas teadsite, et geomeetrilised muutused lisatakse HTML-elementidele teisendadaCSS-i omadusi, näiteks skaala, viltuse ja pööramise, saab animeerida? Neid saab animeerida üleminek vara ja @keyframes animatsioone, kuid mis veelgi lahedam on see, et animeeritud muundamisi saab lisada pisut lisades põrgatama, kasutades kuupmeetri () ajastusfunktsioon.

    Lühidalt, kuupmeetri () (CSS-is) on a ülemineku ajastamise funktsioon. See määratleb ülemineku kiiruse ja seda võib muuhulgas kasutada ka varem luua animatsioonides kopsakas.

    Selles postituses läheb kõigepealt luua lihtne transformatsiooni animatsioon millele me hiljem Lisa kuupmeetri () ajastusfunktsioon. Selle juhendi lõpus saate aru, kuidas luua animatsiooni, mis kasutab nii fan-out kui ka põrgatavat efekti. Siin on lõpptulemus (efekti nägemiseks klõpsake).

    Demo on inspireeritud sellest kaunist Dribbble'ist, mille Christopher Jones pildistas animeeritud asukohamarkeriga.

    PILD: Dribble
    1. Lehekülgede loomine

    Asukohamarkeri kuju koosneb viiest (kutsume neid). Selle loomiseks ovaalne lehest, kasutame raadius CSS-i omadus. The raadius ühe nurgaga koosneb kahest raadiusest, horisontaalne ja vertikaalne, nagu allpool näidatud.

    IMAGE: W3C

    The raadius Omandil on palju erinevaid süntakseid. Markeri kuju jaoks kasutame keerulisemat:

     äärisraadius: htl htr hbr hbl / vtl vtr vbr vbl; 

    Selles süntaksis rühmitatakse horisontaalsed ja vertikaalsed raadiused; h & v kujutavad horisontaalseid ja vertikaalseid raame ning t, l, b & r esindavad ülemist, vasakut, alumist ja paremat nurka. Näiteks, vbl tähistab vasakus alumises nurgas asuvat vertikaalset raadiust.

    Kui sa annad ainult üks väärtus horisontaalse või vertikaalse külje puhul kopeerib see väärtus kõikidele teistele horisontaalsetele või vertikaalsetele raadiusele.

    Et luua vertikaalne ovaalne kuju, hoidke horisontaalraadiusega 50% kõigi nurkade jaoks ja reguleerige vertikaalsed, kuni soovitud kuju on näha. The horisontaalne külg kasutab ainult ühte väärtust: 50%.

    The vertikaalne raadius vasakpoolse ja ülemise parema nurga all 30%, vasakus ja alumises paremas nurgas kasutatakse 70% väärtus.

    HTML

    CSS

    .pinStarLeaf laius: 60 px; kõrgus: 120 px; raadius: 50% / 30% 30% 70% 70%; taustavärv: # B8F0F5; 
    PILD: Markeri kuju (vertikaalne ovaalne)
    2. Lehtede korrutamine

    Kuna marker tõmbab välja viie lehe, loome veel neli koopiat lehest erinevates värvides ja absoluutse positsioneerimisega, et neid üksteisele virnastada.

    HTML

    CSS

    #pinStarWrapper laius: 300 px; kõrgus: 300 px; positsioon: suhteline;  .pinStarLeaf laius: 60 px; kõrgus: 120 px; positsioon: absoluutne; raadius: 50% / 30% 30% 70% 70%; vasakul: 0; paremale: 0; top: 0; põhja: 0; marginaal: auto; läbipaistmatus: .5;  .pinStarLeaf: nth-of-type (1) taustavärv: # B8F0F5;  .pinStarLeaf: nth-of-type (2) taustavärv: # 9CF3DC;  .pinStarLeaf: nth-of-type (3) taustavärv: # 94F3B0;  .pinStarLeaf: nth-of-type (4) taustavärv: # D2F8A1;  .pinStarLeaf: nth-of-type (5) taustavärv: # F3EDA2;  
    3. Klõpsa sündmuse ja esteetika parandamine

    Olgem lisage märkeruut koos #pinStarCenterChkBox identifikaator klikkimise sündmuse salvestamiseks. Kui märkeruut on märgitud, hakkavad lehed välja (pöörlevad). Peame lisama ka a valge ring koos #pinStarCenter esteetika identifikaator. See asetatakse markeri ülaosale ja see on asukohamarkeri keskosa.

    HTML

    Me asetame märkeruudu enne ja valge ring pärast lehti:

    CSS

    Kõigepealt määrame ruudu ja katteringi põhilised stiilid:

     #pinStarCenter, #pinStarCenterChkBox laius: 45px; kõrgus: 50 px; positsioon: absoluutne; vasakul: 0; paremale: 0; top: -60px; põhja: 0; marginaal: auto; taustavärv: #fff; raadius: 50%; kursor: pointer;  #pinStarCenter, .pinStarLeaf pointer-sündmused: pole;  #pinStarCenter> sisend [type = "checkbox"] laius: 100%; kõrgus: 100%; kursor: pointer;  

    Kuna iga leht pöörleb piki z-telge erinevates nurkades, peame määrama transform: rotatez (); kinnisvara vastavalt luua tähtkuju. Rakendame ka üleminek vara pöörlemise efekti jaoks (täpsemalt me ​​kasutame üleminek: teisendage 1s lineaarseks reegel lehtedele).

     #pinStarCenterChkBox: kontrollitud ~ .pinStarLeaf üleminek: teisendada 1s lineaarset;  #pinStarCenterChkBox: kontrollitud ~ .pinStarLeaf: nth-of-type (5) transform: rotatez (35deg);  #pinStarCenterChkBox: kontrollitud ~ .pinStarLeaf: nth-of-type (4) transform: rotatez (105deg);  #pinStarCenterChkBox: kontrollitud ~ .pinStarLeaf: nth-of-type (3) transform: rotatez (180deg);  #pinStarCenterChkBox: kontrollitud ~ .pinStarLeaf: nth-of-type (2) transform: rotatez (255deg);  #pinStarCenterChkBox: kontrollitud ~ .pinStarLeaf: nth-of-type (1) transform: rotatez (325deg);  

    Kui te vaatate ülaltoodud CSS-i, siis näete #pinStarCenterChkBox: kontrollitud ~ üldine vendade valik, mille lisame ainult üleminek ja teisendada omadused kui märkeruut on märgitud (kui kasutaja klõpsas markeril).

    4. Pööramise keskuse muutmine

    Vaikimisi paikneb pöörlemise keskpunkt pööratud elemendi keskel, meie puhul, lehtede keskel. Me peame ümberkujundamise keskpunkti liikuma lehtede sisemise otsaga. Me saame seda teha kasutades teisenduse päritolu CSS-i omadus muudab transformeeritud elementide asukohta.

    Pöördefekti nõuetekohaseks toimimiseks lisage kaks järgmist reeglit .pinStarLeaf meie CSS-faili valija:

     .pinStarLeaf transform-origin: 30px 30px; üleminek: teisendage 1s lineaarne;  

    Vaatame oma fännide animeerimist toimingutes - praegu, ilma põrgatöö efektita. Klõpsa markeril oleva valge ringi peal.

    Mõistmine, kuidas ubic-Bezier () toimib

    Nüüd, põrgatuse efekti lisamiseks peame asendama lineaarne ajastusfunktsioon koos kuupmeetri () Euroopa üleminek deklaratsioonid meie CSS-failis.

    Kuid kõigepealt mõista loogika taga kuupmeetri () ajastusfunktsioon et saaksite kergesti mõista põrgatavat efekti.

    Süntaks kuupmeetri () funktsioon on järgmine, d ja t on kaugus ja aega, ja nende väärtused jäävad tavaliselt vahemikku 0 kuni 1:

    kuupmeetri (t1, d1, t2, d2)

    Kuigi CSS-i selgitatakse kuupmeetri () kauguse ja aja poolest ei ole see õige, see on sellest palju lihtsam mõista.

    Oletame, et seal on kast, mis liigub punktist A kuni B 6 sekundi jooksul. Kasutame järgmist kuupmeetri () ajastamise funktsioon üleminekuga t1 = 0 ja d1 = 1 väärtused.

     / * t1 = 0, d1 = 1, t2 = 0, d2 = 0 * / kuupmeetri suurune (0,1,0,0) 

    Peaaegu aja jooksul liigub karp A-st keskpunktini ja võtab ülejäänud aja B-ni.

    Proovime sama üleminekut väärtustega t1 = 1 ja d1 = 0.

     / * t1 = 1, d1 = 0, t2 = 0, d2 = 0 * / kuupmeetri suurune (1,0,0,0) 

    Esimese kolme sekundi jooksul ei liigu kasti palju ja hiljem hüppab see peaaegu keskpunkti ja hakkab B-suunas liikuma..

    Nagu sa näed, d1 kontrollib A vahemaa & keskpunkt, ja t1 the A-aja keskpunktini jõudmiseks kulub aega.

    Kasutagem d2 ja t2 nüüd. Mõlemad t1 ja d1 on 1 ja t2 = 1 ja d2 = 0.

     / * t1 = 1, d1 = 1, t2 = 0, d2 = 1 * / kuupmeetri suurune (1,1,0,1) 

    Kast liigub 3 sekundi jooksul peaaegu pooleldi (tänu sellele t1 = 1, d1 = 1) ja mitte mingil ajal hüppab punktini B.

    Viimane näide vahetab eelmised väärtused t2 ja d2:

     / * t1 = 1, d1 = 1, t2 = 1, d2 = 0 * / kuupmeetri suurune (1,1,1,0) 

    Kast liigub 3 sekundi jooksul peaaegu pooleldi (tänu sellele t1 = 1, d1 = 1), siis veel kolm sekundit ei liigu palju enne punkti B hüppamist.

    Need näited näitavad seda d2 ja t2 kontrollib kaugust ja kellaaega minna keskpunktist punktini B.

    Kuigi te ilmselt ei vaja seda pikka (veel harva) selgitust kuupmeetri () praegu leian, et see aitab teil seda funktsiooni paremini mõista. Nüüd, kus põrgatab see kõik?

    5. Bounce'i efekti lisamine Cubic-Bezieriga ()

    The peamised parameetrid põrgutamise efektiks on vahemaad, d1 ja d2. A d1 väärtus vähem kui 1 võtab kasti punkti A taga enne B algust animatsiooni alguses.

    A d2 väärtus rohkem kui 1 võtab kasti kaugemale punktist B enne naasmist animatsiooni lõpus B-le. Seega on edasi-tagasi põrgatamise efekt.

    Lisan nüüd kuupmeetri () väärtused otse meie demole selle esimese asemel lineaarne väärtuse üleminek ja näete tulemusi.

     #pinStarCenterChkBox: kontrollitud ~ .pinStarLeaf üleminek: teisendage 1s kuupmeetri suurust (.8, - .5, .2,1.4);  

    Siin on lõpptulemus, ainult CSS-i väljatõrjumise animatsioon, millel on tagasilöögiefekt:

    Võrdluseks ja põrgatöö paremaks mõistmiseks on siin, kuidas kuupmeetri () animatsiooni väärtus käitub, kui seda rakendatakse meie näidiskastile: