Introduktion till Popmotion Tween

Popmotion är ett funktionellt JavaScript-animationsbibliotek. Jämfört med andra bibliotek som GreenSock eller Anime.js, är Popmotion lågnivå och oinvesterad.

Den packar massor av funktioner, som vårfysik och pekarspårning, till en mycket liten filstorlek (11,5 kb).

Det gör det möjligt för utvecklare att skriva egna funktioner med hjälp av enkla funktioner, snarare än att vänta på att biblioteksförfattaren lägger till dem.

Det betyder också att det är lika enkelt att animera 3D-objekt, diagram eller React-komponenter som det är att animera DOM- eller SVG-element.

Denna flexibilitet kan göra initialkurvan brantare än för andra bibliotek. Så, i den här tutorialserien lär vi oss grunderna i Popmotions kraftfulla animationer. Vi börjar med animationsvärldens arbetshorse tween.

Installera

Popmotion stöder en mängd olika installationsmetoder. I produktion rekommenderar jag att du installerar via npm, eftersom det här låter dig bara importera de bitar du behöver, vilket sparar utrymme ännu mer.

Men för denna handledning kan du följa med denna CodePen, som har upprättats med den senaste versionen av Popmotion.

Tween

För de som är obekanta, en mellanliggande övergång mellan ett tal och en annan under en förutbestämd tid. Om du har använt en CSS-övergång, är Popmotions tween funktion fungerar exakt densamma.

Vi kan importera tween såhär:

const tween = popmotion;

Som standard, tween animerar mellan 0 och 1 över en varaktighet av 300 millisekunder. Om du öppnar konsolen kan du testa detta själv:

tween (). start (uppdatering: v => console.log (v), komplett: () => console.log ('complete!'));

Men vi vill inte animera konsolen - vi vill animera bollen. För detta inkluderar Popmotion en annan funktion, styler.

Notera: I det här första exemplet definierade vi båda uppdateringoch komplett funktioner. Men om du ger Start med bara en enda funktion, kommer den automatiskt att tilldela den uppdatering.

Styler

styler används för att skapa gränssnitt för hämtning / inställning för HTML och SVG-stilar optimerade för användning med animeringar (från vilket bibliotek som helst!).

I ovanstående exempel, tween utger ett nummer, så vi kan naturligtvis sätta bollens opacitet så här (prova det):

const ball = document.querySelector ('. ball'); tween (). start (v => ball.style.opacity = v);

dock, styler har följande fördelar:

  • Satser gör att du förhindrar att layouten slår ut.
  • Ger högst en gång per ram.
  • Tillåter omvandla rekvisita som ska ställas individuellt, vilket möjliggör självständig animering av rekvisita som skala och translateX.
  • Förena CSS och SVG transform koordinatmodeller.
  • Förstår standardvärdetyp, så du kan ställa in translateX (till exempel) utan att lägga till 'Px'.

Du är inte heller begränsad till att använda den inom en animering. Du kan manuellt ställa in ett elements stil medan andra animerar, och ändringen kommer automatiskt att schemaläggas och sändas tillsammans med de andra.

Så låt oss importera det:

const tween, styler = popmotion;

Skapa boll styler:

const ballStyler = styler (boll);

Nu kan vi använda ballStyler att ställa in och animera någon av bollens egenskaper. ballStyler.set är flexibel. Det kan ställa in en enda egenskap:

ballStyler.set ('background', '# f00');

Eller flera egenskaper:

ballStyler.set (x: 100, y: 100);

Vi vill animera opacitet för nu, så låt oss ändra vår animation:

tween (). start (v => ballStyler.set ('opacity', v));

uppsättning kan också curry. Genom att bara ge det ett egendomsnamn returnerar det en setterfunktion för den propellen. Så vi kan nämna ovanstående genom att skriva:

. Tween () starta (ballStyler.set ( 'opacitet'));

Hittills har vi bara animerat bollen med standard tween egenskaper. Låt oss ta en titt på hur mångsidig a tween kan vara.

Tween Props

tween accepterar ett valfritt argument, ett objekt av tween-egenskaper. Låt oss ta en titt på några av de mer vanliga rekvisita:

från/till

en tween kan vara mellan några två stater. Vi definierar dessa med från och till.

Låt oss animera translateX genom omskrivning 'opacitet' till 'X'. Passera sedan från och till rekvisita:

tween (från: 0 till: 300)

Din boll flyttas nu från vänster till höger med 300px.

Men jag sa att a tween kan vara mellan två stater, inte bara siffror. Om vi ​​tillhandahåller från och till föremål av siffror och / eller färger, vi kan animera flera egenskaper samtidigt.

Prova detta:

tween (från: x: 0, background: '# 198FE3', till: x: 300, bakgrund: '# FF1C68') start (ballStyler.set);

Detta är ett enkelt sätt att animera flera rekvisita samtidigt.

Varaktighet

varaktighet definieras i millisekunder. Som standard tar en tween 300ms, men om vi ställer in varaktighet till 1000, det tar en sekund:

tween (duration: 1000, från: 0 till: 300). start (ballStyler.set ('x'));

Underlätta

Easingfunktioner används i tweening för att ändra rörelseshastigheten under animeringen.

I verkliga livet startar eller stoppar inte objekt vid deras målhastighet. Beroende på objektet kommer de gradvis att öka, eller gradvis sakta ner, eller båda.

En lättnad funktion fungerar helt enkelt genom att ta intervallets framsteg, definierad som ett tal mellan 0 och 1, och återkommer en ny.

Du behöver inte veta hur man gör dessa funktioner eftersom Popmotion ger dig en massa.

Importera dem:

const easing, tween, styler = popmotion;

Som standard, lätthet är satt till easing.easeOut. När en funktion lättas ut betyder det det börjar snabbt och slutar långsamt.

Detta valdes som standard eftersom det är min tro på att de flesta animationer i användargränssnitt ska initiera som ett resultat av en användares åtgärd. Genom att starta snabbt och sluta långsamt, kommer användaren att känna som om de överförde sin energi via sina knappar eller klickar direkt till gränssnittet. Det känns snällt, levande och lyhörd.

För många animeringar bort från användarens inmatning, eller på egen hand, kan det känna sig lite mindre för att använda en animering som lättnar in, som easing.easeInOut eller easing.anticipate, vilket gör en lekfull bogserbåt före animering.

Slutligen finns det easing.cubicBezier funktion, vilket skapar en ny lättnad funktion baserad på en lättnadskurva, precis som CSS-övergångar. Detta ger en stor grad av kontroll och flexibilitet över din rörelse.

Försök att applicera några av dessa på din animering när du spelar med varaktighet för att se hur det påverkar känslan och karaktären av den.

Upprepning

Animationer kan upprepas på tre olika sätt: slingajojo, och flip.

Slinga startar animationen från början. Jojo speglar mellanrummen genom att köra den bakåt. Och flip kör det bakåt ochspringer lättare funktionen.

En av dessa kan ställas in per tween och varje sätts som ett tal som anger hur många gånger som ska repeteras. För att repetera för alltid, gå enkelt Oändlighet:

tween (yoyo: Infinity, från: 0 till: 300). starta (ballStyler.set ('x'));

Uppspelning 

När en tween startas, returnerar den uppspelningskontroller som vi kan använda för att styra den animationen.

const controls = tween (). start (console.log);

I ovanstående exempel, kontroller kommer ha tillgång till alla dessa uppspelningsmetoder, som slutapaus, och återuppta:

const controls = tween (duration: 1000, från: 0 till: 300). start (ballStyler.set ('x')); setTimeout (() => controls.stop (), 500);

Vi kan använda dessa uppspelningskontroller till paus och då söka genom intervallet:

const controls = tween (duration: 1000, från: 0 till: 300). start (ballStyler.set ('x')); controls.pause (); controls.seek (0,5);

Med detta kan vi skapa en skurbar animering! I en senare handledning undersöker vi hur man använder Popmotions pekare funktion för att skapa en scrub bar, men för närvarande kan du skrubba en tween med en andra tween, för att se detta i åtgärd:

const controls = tween (från: 0 till: 300). start (ballStyler.set ('x')); controls.pause (); tween (duration: 1000) .start (controls.seek);

keyframes

För enkla, a-till-b-övergångar, tween är utmärkt. För mer komplicerade sekvenser av tweens, ger Popmotion en annan funktion som heter nyckelrutor.

Låt oss importera det nu:

const keyframes, easing, tween, styler = popmotion;

nyckelrutor tweens genom alinjär serie stater. Vi ger dessa stater till dess värden fast egendom:

keyframes (värden: [0, -150, 150, 0], duration: 2000). start (ballStyler.set ('x'));

Tycka om tween, vi kan också definiera dessa stater som objekt. Så för att flytta bollen runt i en kvadrat kan vi skriva:

keyframes (värden: [x: 0, y: 0, x: -150, y: -150, x: -150, y: 150, x: 150, y: 150,  x: 150, y: -150, x: 0, y: 0], varaktighet: 2000). start (ballStyler.set);

Som standard, nyckelrutor kommer att fördela var och en av dessa tweens en lika stor andel av det totala varaktighet.

Genom att tillhandahålla en gånger array, kan vi markera var och en av dessa stater med ett tal mellan 0 och 10 representerar starten på animationen och 1 representerar slutet:

keyframes (värden: [0, -150, 150, 0], gånger: [0, 0,1, 0,9, 1], varaktighet: 2000). start (ballStyler.set ('x'));

På så sätt kan vi ändra animationslängden utan att behöva ange varje enskilt segment.

Det låter också varje animering ges en individuell lättnad med lättnader fast egendom:

keyframes (värden: [0, -150, 150, 0], tider: [0, 0,1, 0,9, 1], easings: [easing.easeIn, easing.linear, easing.easeOut], duration: 2000). start (ballStyler.set ( 'x'));

Därför att nyckelrutor är bara en tween, Vi kan justera den övergripande uppspelningen med alla samma egenskaper som lätthet och slinga, och kontrollera det med alla samma metoder som vi lärt oss tidigare.

Slutsats

De tween och nyckelrutor funktioner kan du skapa både enkla och komplexa animationer.

styler ger egna fördelar, som användningen utanför animationer, standardisering av CSS och SVG-transformmodeller, och gör batching för hög animationsprestanda.

I den här handledningen har vi täckt några av de animationer som Popmotion erbjuder. I nästa del kommer vi att utforska pekarspårning och hastighetsbaserade animeringar som fysik och vår.

Hastighetsbaserade animeringar kan användas för att skapa naturliga känslighetsgränssnitt som reagerar realistiskt på användarens inmatning. Vi ses där!