Slik bruker du animateTransform for Inline SVG Animation

I dag skal vi sette deg igjennom det grunnleggende ved å bruke animateTransform å generere inline-animasjoner med SVG (skalerbar vektorgrafik).

Hvis du er helt ny hos SVG, anbefaler jeg at du sjekker ut Komme i gang med skalerbar vektorgrafik (SVG) for å få deg raskere.

Teknikkene du lærer vil tillate deg å lage sofistikert ikon og bildeanimasjoner uten en enkelt GIF, JPEG eller PNG, med null JavaScript, og uten den svakeste hvisken av Flash.

Animasjonene du lager vil være enkle å redigere senere fordi de er ren kode, og resultatene vil bare ta opp et par KB med dyrebar båndbredde når de blir sett.

Før vi begynner

For å animere SVG-figurer trenger du først muligheten til å lage dem. Jeg har funnet den enkleste måten å lage SVGs på, å bruke Sketch from Bohemian Coding. Hvis du ikke eier Sketch, kan du ta en gratis 30-dagers prøveperiode i forbindelse med denne opplæringen.

Vi vil manipulere SVG-koden, så etter at du har tegnet en form i Sketch, lager du et stykke rundt det og eksporterer det stykket som en SVG-fil.

Du vil da kunne åpne din eksporterte fil i et kodeditor (som Sublime Text) og kopiere SVG-koden fra innsiden. Alt du trenger er koden fra åpningen tag til avslutningen stikkord.

Sketch genererer for eksempel følgende SVG-kode for det blå rektangelet som er vist ovenfor:

  Slice 2 Skapt med Skisse.     

For å gjøre koden visuelt enklere å jobbe med, gjør vi et par små endringer i koden.

Sett svg elementets bredde og høyde til 100% og slett ViewBox innstilling. Slett også Generator kommentar og tittel, desc, defs og g elementer.

Du bør ende opp med noe slikt:

  

Slett den koden i et HTML-dokument, og når du ser på nettleseren, bør du se det samme blå rektangel på siden din som du så i Sketch:

Merk: Bildet ovenfor inneholder en X- og Y-akse i bakgrunnen, da du må forstå disse for å lage animasjonene dine. Du lærer hvorfor snart.

Hva gjør "animateTransform"?

Det korte svaret er, animateTransform element genererer animasjoner ved å sette transformasjonsegenskaper på SVG-formene som den brukes på.

Gitt det, er det logiske neste spørsmålet:

Ok, så hva gjør "Transform"?

legge forvandle Innstillinger til en form gjør at du kan endre hvordan denne formen vises i 2D-plass. Det er fem forskjellige typer transformasjon du kan utføre:

  1. oversette
  2. skala
  3. rotere
  4. skewX
  5. skewY

De animateTransform Attributt lar deg animere mellom ulike transformasjonsformer, så før du begynner å animere, er det viktig å forstå hvordan transformasjoner faktisk fungerer.

Transformasjoner og 2D plass

Fordi transformasjoner opererer i 2D mellomrom, relaterer deres innstillinger til X- og Y-koordinater plottet på en X / Y-akse, som du så avbildet bak det blå rektangelet tidligere.

  • De X akse er den horisontale linjen i 2D mellomrom, og Y akse er den vertikale linjen. Som standard starter hver form på en posisjon av 0 på begge X og Y akser.
  • Fra 0 posisjon på X akse, positive verdier korresponderer med å flytte til høyre, og negative verdier korresponderer med å flytte til venstre.
  • Fra 0 posisjon på Y aksen, svarer positive verdier med å bevege seg nedover, og negative verdier samsvarer med å bevege seg oppover.

Hvis dette ikke gir full mening, så vær ikke bekymret, da det blir mye tydeligere som du ser eksemplene på hver type transformasjon nedenfor.

Ikke bekymre deg for koden for disse transformasjonene, heller, da vi vil dekke det når vi går videre til å lage animasjoner. Til å begynne med vil jeg bare at du skal få essensielle nedskrifter på hva de fem typer transformasjon faktisk gjør.

Oversette

Dette forandrer formens posisjon på X-aksen (horisontal) og Y-aksen (vertikal).

For eksempel, her er vårt blå rektangel med oversette verdier av 150X (horisontal) akse og 20Y (vertikal akse:

Husk fra delen over de positive verdiene på X akse samsvarer med å flytte til høyre, og positive verdier på Y akse samsvarer med å bevege seg nedover.

Ved å sette inn oversette verdi for X til positiv 150, vårt rektangel har flyttet til høyre med 150 piksler. Angir verdien for Y til positiv 20 har flyttet rektangelet ned med 20 piksler.

Scale

Dette multipliserer formenes overordnede størrelse på X-aksen (bredde) og Y-aksen (høyde).

Skalinnstillinger fungerer som multiplikatorer av formenes originale størrelse. For eksempel, hvis vi setter X skala til 3 det ville gjøre formen tre ganger bredere. Hvis vi setter inn Y skala til 1,25 det ville gjøre formen en og en fjerdedel ganger høyere, slik som:

Også oversatt (150, 20)

Rotere

Dette roterer formen rundt et gitt punkt i grader.

Rotasjon fungerer ved å angi antall grader som du vil rotere formen på. For eksempel, her er vårt rektangel rotert med 45 grader:

Også oversatt (150, 20)

Som standard vil formen rotere rundt sitt øverste venstre hjørne, men du kan også få det til å rotere rundt et annet punkt. Vi vil dekke hvordan det gjøres senere i opplæringen.

SkewX

Dette skiller formen langs X (horisontal) akse.

Skewing langs X-aksen fungerer også i grader. For eksempel, i billedet nedenfor er rektangelet skjevt med 20 grader langs X-aksen:

Også oversatt (150, 20)

SkewY

Dette skiller formen langs Y (vertikal) akse i grader.

SkewY fungerer på akkurat samme måte som SkewX, bare transformasjonen skjer vertikalt langs Y-aksen som sådan:

Også oversatt (150, 20)

Animerende transformasjoner

Nå som du vet hva forandringer egentlig gjør, kan du begynne å lage animasjoner mellom forskjellige tilstander av transformasjon. Den grunnleggende prosessen har tre trinn:

  1. Sett en innledende transformasjonsstatus: fra stat.
  2. Sett en annen transformasjonstilstand: til stat.
  3. Still inn timingen og repetisjonen for en animert overgang mellomfra og tilstat.

Dette forstås best gjennom et praktisk eksempel, så la oss begynne med å animere en oversette transformasjon.

Animerer Oversett Transformasjoner

Du vil huske at tidligere begynte vi med vårt blå rektangel på standardposisjonen til 0 0, dvs. 0X akse og 0Y akser. Vi stiller denne posisjonen som vår fra stat.

Vi så på et eksempel på det samme blå rektangel med oversettelsesinnstillinger for 150 20 anvendt, dvs.. 150X akse og 20Y akser. Vi stiller denne posisjonen som vår til stat.

Ved hjelp av animateTransform Vi kan gjøre rektangelet glidende glatt mellom vår fra og vår til stater over en periode på to sekunder.

Din SVG-form, i dette tilfellet rektangel, må ha både åpnings- og lukkekoder, f.eks. .

De animateTransform attributtet skal plasseres mellom disse kodene slik:

   

Ta en titt på egenskapene som er satt inn i animateTransform stikkord. Dette er hva som kontrollerer hvordan animasjonen din går.

Vi har satt type å oversette, noe som betyr at vi skal bruke en oversette transformasjonstype. Som planlagt har vi satt vår 0 0 posisjon i fra stat og vår 150 20 posisjon i til stat.

Verdien for begynne er satt til 0s, betyr at animasjonen vil begynne null sekunder etter belastning, og dur er satt til 2s, som betyr at animasjonen vil løpe over en periode på to sekunder. Til slutt har vi tatt med repeatCount satt til ubestemt noe som betyr at animasjonen vil spille på løkke.

Dette gir oss følgende animasjon:

Animerer andre transformasjoner

Prosessen er nøyaktig den samme for å rotere alle fire av de andre typer transformasjoner. Etter å ha satt inn type Verdien til hvilken type transformasjon du vil, skriv inn verdier for din fra og til transformasjonstilstander.

For eksempel kan vi bruke følgende animateTransform innstillinger for å skala vårt rektangel opp til den størrelsen du så i den tidligere delen om skalaomforming:

 

Fordi skalaomformingsinnstillinger multipliserer formenes opprinnelige størrelse begynner vi med en verdi på 1 1fra innstilling. Å gjøre dette setter sin opprinnelige størrelse ved en multiplikasjon på 1.

Våre til innstilling av 3 1,25 vil animere vår skala transformasjon opptil tre ganger den opprinnelige bredden på X-aksen, og en og en fjerdedel av den opprinnelige høyden på Y-aksen.

Merk: Du finner dine faktiske in-browser animasjoner kjører mye jevnere enn skjermbildet GIF du ser ovenfor.

Animer flere transformasjoner

Vi kan også kombinere de to animasjonene vi har laget så langt, både til å oversette og skala samtidig. Du kan bare bruke en enkelt animateTransform tag inne din rect tag, så å bruke flere animasjoner må du innlemme et sett med g koder, som representerer en gruppe SVG objekter.

For å gjøre dette arbeidet, legg til åpning og lukking merker rundt din eksisterende rect tags:

     

Legg deretter til din andre animasjon utenfor lukkingen tag, men før avslutningen stikkord. I dette tilfellet skal vi reintroduce vår translate transformasjon:

      

Vi har nå både skala og oversette transformasjoner som animerer samtidig:

Du kan bruke animateTransform en gang per form eller gruppe. Hvis du trenger å legge til flere animasjoner, sett inn et annet sett med gruppetiketter rundt koden din og nest tillegget ditt animateTransform tag inne i det.

La oss ta en rask titt på de resterende tre transformasjonstyper, hver enkelt opprettet ved å endre bare type, fra og til innstillinger, og også kombinert med vår opprinnelige oversettelse animasjon.

Rotasjon Animasjon (pluss oversettelse)

I dette eksemplet type har blitt satt til rotere, fra har blitt satt til 0 til å begynne med ingen rotasjon, og til har blitt satt til 45 så vi roterer 45 grader over to sekunder:

SkewX og SkewY Animasjon (pluss oversettelse)

I de følgende to animasjonene type har blitt satt til skewX og skewY henholdsvis, fra er satt til 0 til å begynne med ingen skeving, og til har blitt satt til 20 så vi skjev av 20 grader over to sekunder:

Animert skewX transformasjon
Animert skewY transformasjon

Praktisk eksempel: Laster ikon

Det finnes et uendelig antall muligheter for animasjoner du kan opprette ved hjelp av disse grunnleggende teknikkene, men en av de mest umiddelbart nyttige er opprettelsen av lastingsikoner der du tidligere kunne ha stolt på animerte GIFs.

Dette er et lastingsikon jeg opprettet på omtrent fem minutter med Sketch:

Jeg eksporterte den deretter til en SVG-fil som ga meg følgende kode:

  loader01 2 Skapt med Skisse.                  

Gitt dette ikonet består av flere former i en gruppe, og som vi har lært ovenfra kan du søke animateTransform til en gruppe, la jeg til animasjonskoden før sist avsluttet stikkord:

    

Koden ovenfor angir ikonet for å rotere fra 0 til 360 grader, dvs. en full sirkel.

Revolve akse

Merk at denne gangen har jeg også inkludert et ekstra to tall i begge fra og til innstillinger. Dette forteller at animasjonen dreier seg om et punkt på formens egen indre X / Y-akse på 18 18, dvs. midten av formen gitt den er 36x36 piksler i størrelse.

Dette gir følgende animasjon:

Igjen, vil din animasjon i nettleseren bli jevnere enn den ovennevnte GIF, så sørg for å sjekke ut den virkelige tingen. Som du kan se, er det veldig raskt og enkelt å sette sammen animasjoner du kan få solid praktisk bruk ut av.

Wrapping Up

Hvis du ennå ikke har spilt på SVG-animasjon, bør du nå ha verktøyene du trenger for å få en god solid start.

Videre lesning

  • Great Codepen eksempel på animerte loader SVGs
  • Mer om hvordan animateTransform jobber over på W3C.
  • Ta deg en kopi av kilden til denne opplæringen, lek med eksemplene og ha det gøy å lage dine egne inline SVG-animasjoner!