TimelineMax Förstå mekaniken

Vad du ska skapa

Klar för vissa definitioner? Mekanik definieras som ett område som berör beteendet hos föremål som utsätts för krafter eller förskjutningar, och de efterföljande effekterna av dessa föremål på deras omgivning. en tidslinje är ett sätt att visa en lista över händelser i kronologisk ordning, ibland beskrivet som en projektartefakt. Låt oss överbrygga de två områdena för att lära oss att kontrollera och konfigurera våra animationer som om vi faktiskt vet vad vi gör.

Syntax

Mer definitioner kommer: termen syntax hänvisar direkt till de regler och principer som styr strukturen. Som vi diskuterade i vår tidigare handledning är JavaScript-syntaxen för att konfigurera en TimelineMax-animering som följer:

var config = ; var tmax_tl = ny TimelineMax (config);

Här har jag definierat en ny tidslinje med TimelineMax () konstruktör och passerade config objekt som ett argument. Detta argument, om du kommer ihåg, är det som kallas "ett objekt objektivt" innehållande nyckelvärde parningar relaterade till våra konfigurationsinställningar. De TimelineMax () konstruktör är vad som används för att inställa en ny TimelineMax-förekomst.

Kom ihåg när du är van vid syntaxen, är följande rader densamma; vilket betyder att båda är identiska (den sista raden är avsett för bekvämlighet).

tmax_tl.add (TweenLite.to (element, 1, vänster: 100, opacitet: 0,5)); tmax_tl.to (element, 1, vänster: 100, opacitet: 0,5);

Config och Properties

Om du är något som jag är det osannolikt kommer du att komma ihåg alla parametrar som accepteras för konfigurationsalternativen TimelineMax. Lyckligtvis kan en fullständig lista med konfigurationsalternativ och egenskaper hittas här som referens.

Förutom den faktiska konfigurationen har vår tidslinje också egenskaper. Till exempel om jag skrev följande:

var config = repeat: -1, delay: 1, repeatDelay: 0; var tmax_tl = ny TimelineMax (config); console.log (tmax_tl.vars);

konsolen skulle logga hela config variabel (representerad av tmax_tl.vars) som ett objekt och tillåter mig att inspektera varje nyckel / värde som har ställts in. Det finns en hel lista över egenskaper som är tillgängliga för din tidslinje som du kan dyka in här för vidare utforskning.

Bara för skojs skull, försök med det här och kontrollera inspelningen från din DevTools-konsol:

console.log (tmax_tl.timeline);

Du bör se en liknande utmatning till följande skärmdump:

Prova att rapportera den här nästa egenskapen i konsolen och se till att ditt sinne blåses (konsolen ska rapportera ett numeriskt värde):

console.log (tl.timeline._timeScale);

Position Parameter

Den verkliga hemligheten att bygga fantastiska animationssekvenser med exakt timing är att förstå positionsparametern. Den här super-flexibla parametern styr placeringen av tweens, etiketter, återuppringningar, pausar och till och med kapslade tidslinjer, så att du kan placera någonting, var som helst och i vilken sekvens som helst!

Om vi ​​till exempel tittar på följande kod ser du att positionsparametern är det sista argumentet för till() metod.

tmax_tl.to (mål, duration, vars, position)

Här är ett exempel på hur allt ser ut. Var noga med kommentarerna som förklarar hur positionsargumentet leder upp sekvensen. Vi lägger också metoder efter varandra: vad kallas chaining.

tmax_tl.to (element, 1, x: 200) .to (element, 1, y: 200, '+ = 1') // 1 sekund efter slutet av föregående till 1, rotation: 360, '- = 0,5') // 0,5 sekunder före slutet av föregående till () tween .to (element, 1, skala: 4, 6); // Exakt 6 sekunder från början av tidslinjen

Du kan tänka på positionsargumentet som ett sätt att styra placeringen av en tween på tidslinjen (som standard är det slutet på tidslinjen och representeras som '^ = 0'). Använd ett nummer för att ange en absolut tid i sekunder. Prefixen som '^ =' eller '- =' bidra till att kompensera införingspunkten i förhållande till slutet av tidslinjen. Till exempel, '^ = 2' skulle placera intervallet två sekunder efter slutet, lämnar ett gap på två sekunder.

Öva utmaning och instruktioner för att komma igång från GreenSock

  1. Besök den redigerbara versionen av animationsstartfilen på CodePen.
  2. Klicka på gaffel knappen för att skapa din egen kopia.
  3. Följ instruktionerna i koden.
  4. När du är klar, tweet CodePen-länken till @greensock så att de kan få dig att känna dig extra speciell.

Etiketter

Du kan tänka på etiketter som ett sätt att infoga markörer i din animering så att du kan referera till exakta punkter senare i sekvensen. Detta kan vara en punkt där #objectX flyttar 100px från toppen då #objectY har en överlappande interaktion 0,5 sekunder in i #objectX sekvens.

När du använder etiketter, se till att du använder ett strängvärde för att ange var en tween ska placeras och inkludera positionstidsargumentet för att styra utföringspunkten.

// tweens infogas vid och i förhållande till en etiketts position var tmax_tl = ny TimelineMax (); tmax_tl.to ('# green', 1, x: 750) // Lägg till blueGreenSpin-etiketten 1 sekund efter slutet av den gröna sekvensen ... lägg till ('blueGreenSpin', '+ = 1') .to ('# blue' , 2, x: 750, rotation: 360, 'blueGreenSpin') // Lägg till tween på blueGreenSpin-etiketten .to ('# orange', 2, x: 750, rotation: 360, 'blueGreenSpin + = 0.5') ; // Sätt in mellan 0,5 sekunder efter blueGreenSpin-etiketten

Notera: De flesta metoder har noll som standardvärde för positionsargumentet ('^ = 0').

Om du definierar en etikett som inte existerar kommer den automatiskt att läggas till slutet av tidslinjen innan du sätter in den mellan vilken det kan vara ganska bekvämt.

metoder

metoder är det som hjälper till att utföra syftet med vår önskade åtgärd (er), eller med andra ord, den åtgärd vi skulle vilja hända för varje sekvens på vår tidslinje. 

Bara för vetenskapens skull, låt oss skriva en metod som tar ett enda objekt med ett ID på #objectA och gör det flytta till höger om skärmen. Så här skulle det se ut med metoden to ():

/ * .to (mål: [Objekt || Array], varaktighet: Nummer, vars: Objekt, position: *) * / tmax_tl.to ($ ('# objectA'), 1, vänster: '100px') ;

Viktigt att notera baserat på koden ovan är att vi också behöver hjälp av CSS (position: absolute) för att utföra vår begäran (flytta objektet). Kom ihåg att element i webbland har en statisk position, vilket betyder att om du vill flytta ett objekt med ovanstående synsätt måste du se till att motsvarande CSS-egenskaper är på plats, annars kommer inget att hända.

Vill ha mer?

Det är hög tid att du hade något annat att dissekera, tror du inte? 

Följande demo använder till() Metod för att styra varje krets av en lastare (du kan använda ett enklare tillvägagångssätt, men det finns en punkt på den här galningen). Försök att göra de yttre cirklarna och mittencirkeln stagger i sin rörelse med hjälp av positionstidsargumentet. Poängen med övningen är att visuellt förstå hur positionsparametern tillåter överlappning av dina tweens under sekvensen. Som du kan se i följande .gif bränder varje cirkels intervall på exakt samma tidpunkt. Prova och ge denna animering lite krydda genom att överlappa sekvensen som du såg i det animerade gifet som användes för inträdet av detta inlägg. Lycka till, låt oss veta hur du går vidare!

// Senaste argumentet är Position Timing. // Använd det här argumentet för att häva synligheten för omgivande cirklar tmax_tl.to ($ ('svg> cirkel: nth-of-type (1)'), 1, tween_options_to, 0) .to ($ ('svg> circle: nth-of-type (2) '), 1, tween_options_to, 0) .to ($ (' svg> cirkel: nth-of-type (3) ', 1, tween_options_to, 0) .to svg> cirkel: nth-of-type (4) '), 1, tween_options_to, 0) .to ($ (' svg> cirkel: nth-of-type (5) '), 1, tween_options_to, 0) .to ($ ('svg> cirkel: nth-of-type (6)'), 1, tween_options_to, 0) .to ($ ('svg> cirkel: nth-of-type (7)'), 1, tween_options_to, 0)
Se pennan, gaffel och röra med tidpunkten

Nästa gång

Som alltid, Om du skulle vilja hoppa framåt på den här animationsresan, är du välkommen att gå vidare till GreenSock-dokumentationen - läs specifikt på TweenLite och TweenMax. Håll dig klar för nästa del av denna serie som täcker den underbara världen av tweening! jag hoppas vi ses snart igen!