Introduzione a Popmotion Tween

Popmotion è una libreria di animazioni JavaScript funzionale. Rispetto ad altre librerie come GreenSock o Anime.js, Popmotion è di basso livello e non professionale.

Comprende un sacco di funzioni, come la fisica primaverile e il puntatore, in un file molto piccolo (11.5kb).

Permette agli sviluppatori di scrivere le proprie caratteristiche usando semplici funzioni, piuttosto che aspettare che l'autore della libreria le aggiunga.

Significa anche che è altrettanto semplice animare oggetti 3D, grafici o componenti React così come animare elementi DOM o SVG.

Questa flessibilità può rendere più rapida la curva di apprendimento iniziale rispetto ad altre librerie. Quindi, in questa serie di tutorial, impareremo le basi delle potenti animazioni di Popmotion. Inizieremo con il cavallo di battaglia del mondo dell'animazione, il gemello.

Installare

Popmotion supporta una varietà di metodi di installazione. In produzione, consiglio di installare tramite npm, in quanto ciò consente di importare solo i bit necessari, risparmiando ancora più spazio.

Tuttavia, per questo tutorial, puoi seguire questo CodePen, che è stato configurato con l'ultima versione di Popmotion.

Gemello

Per chi non conosce, una transizione tra un numero e un altro per un periodo di tempo predeterminato. Se hai usato una transizione CSS, Popmotion gemello la funzione funziona esattamente allo stesso modo.

Possiamo importare gemello così:

const tween = popmotion;

Di default, gemello anima tra 01 per una durata di 300 millisecondi. Se apri la tua console, puoi provarla tu stesso:

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

Ma non vogliamo animare la console: vogliamo animare la palla. Per questo, Popmotion include un'altra funzione, styler.

Nota: In questo primo esempio, abbiamo definito sia il aggiornarecompletare funzioni. Ma se fornisci inizio con una sola funzione, la assegna automaticamente a aggiornare.

Styler

styler è usato per creare interfacce get / set per stili HTML e SVG ottimizzati per l'uso con le animazioni (da qualsiasi libreria!).

Nell'esempio sopra, gemello sta emettendo un numero, quindi potremmo ovviamente impostare l'opacità della palla in questo modo (provalo):

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

però, styler ha i seguenti vantaggi:

  • Batches rende per evitare il thrash del layout.
  • Rende, al massimo, una volta per fotogramma.
  • permette trasformare puntelli da impostare individualmente, consentendo l'animazione indipendente di oggetti di scena come scalatranslateX.
  • Unifica i modelli di coordinate di trasformazione CSS e SVG.
  • Comprende i tipi di valore predefiniti, quindi puoi impostare translateX (per esempio) senza aggiungere 'Px'.

Non sei inoltre limitato a utilizzarlo all'interno di un'animazione. È possibile impostare manualmente lo stile di un elemento mentre altri si animano e la modifica verrà automaticamente pianificata e raggruppata insieme alle altre.

Quindi importiamolo:

const tween, styler = popmotion;

Crea lo styler per le palle:

const ballStyler = styler (palla);

Ora possiamo usare ballStyler per impostare e animare qualsiasi proprietà della palla. ballStyler.set è flessibile. Può impostare una singola proprietà:

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

O più proprietà:

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

Vogliamo animare opacità per ora, quindi cambiamo la nostra animazione:

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

impostato può anche essere al curry. Fornendo solo il nome di una proprietà, restituirà una funzione setter per quel sostegno. Quindi possiamo chiarire quanto sopra scrivendo:

. Tween () start (ballStyler.set ( 'opacità'));

Finora, abbiamo solo animato la palla usando l'impostazione predefinita gemello proprietà. Diamo un'occhiata a quanto versatile a gemello può essere.

Tween Props

gemello accetta un argomento opzionale, un oggetto di proprietà interpolate. Diamo un'occhiata ad alcuni dei puntelli più comunemente usati:

a partire dal/a

UN gemello può essere tra due stati qualsiasi. Definiamo questi con a partire dala.

Animiamo translateX riscrivendo 'opacità' a 'X'. Quindi, passa a partire dal e a oggetti di scena:

interpolazione (da: 0, a: 300)

La tua palla ora si sposta da sinistra a destra di 300 px.

Tuttavia, ho detto che a gemello può essere tra due stati, non solo numeri. Se forniamo a partire dala oggetti di numeri e / o colori, possiamo animare più proprietà contemporaneamente.

Prova questo:

interpolazione (da: x: 0, background: '# 198FE3', a: x: 300, background: '# FF1C68'). start (ballStyler.set);

Questo è un modo semplice per animare più oggetti di scena contemporaneamente.

Durata

durata è definito in millisecondi. Per impostazione predefinita, un'interpolazione impiega 300 ms, ma se lo impostiamo durata1000, ci vorrà un secondo:

interpolazione (durata: 1000, da: 0, a: 300). start (ballStyler.set ('x'));

Facilitare

Le funzioni di attenuazione vengono utilizzate nell'interpolazione per modificare la velocità di movimento durante l'animazione.

Nella vita reale, gli oggetti non si avviano o si fermano alla velocità di destinazione. A seconda dell'oggetto, accelerano gradualmente, o rallentano gradualmente, o entrambi.

Una funzione di andamento funziona semplicemente prendendo il progresso della Tween, definito come un numero intermedio 01, e restituendone uno nuovo.

Non hai bisogno di sapere come realizzare queste funzioni perché Popmotion ti offre un sacco.

Importali:

const easing, tween, styler = popmotion;

Di default, alleviare è impostato per easing.easeOut. Quando una funzione si attenua, significa inizia veloce e termina lentamente.

Questo è stato scelto come predefinito perché credo che la maggior parte dell'animazione nelle interfacce utente debba essere avviata come risultato dell'azione dell'utente. Avviando velocemente e finendo lentamente, l'utente si sentirà come se avessero impartito la loro energia, tramite il loro tocco o clic, direttamente nell'interfaccia. Sembra scattante, vivo e reattivo.

Per molte animazioni lontane dall'input dell'utente, o da sole, può sembrare un po 'meno fastidioso usare un'animazione che faciliti, come easing.easeInOuteasing.anticipate, che fa uno scherzo divertente prima di animare.

Infine, c'è il easing.cubicBezier funzione, che crea una nuova funzione di andamento basata su una curva di andamento, proprio come le transizioni CSS. Ciò fornisce un enorme livello di controllo e flessibilità sul movimento.

Prova ad applicare alcuni di questi alla tua animazione mentre giochi durata per vedere come influenza la sensazione e il carattere di esso.

ripetendo

Le animazioni possono essere ripetute in tre modi diversi: ciclo continuoyoyo, e Flip.

Ciclo continuo avvia l'animazione dall'inizio. yoyo rispecchia l'interpolazione eseguendola all'indietro. E Flip lo esegue all'indietro eribalta la funzione di andamento.

Uno di questi può essere impostato per interpolazione e ciascuno viene impostato come un numero che indica il numero di volte per ripetere l'animazione. Per ripetere per sempre, semplicemente passare Infinito:

interpolazione (yoyo: infinito, da: 0, a: 300). start (ballStyler.set ('x'));

riproduzione 

Quando viene avviata un'interpolazione, restituisce i controlli di riproduzione che possiamo usare per controllare quell'animazione.

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

Nell'esempio sopra, controlli avrà accesso a tutti questi metodi di riproduzione, come Stoppausa, e curriculum vitae:

const controls = tween (duration: 1000, from: 0, to: 300). start (ballStyler.set ('x')); setTimeout (() => controls.stop (), 500);

Possiamo usare questi controlli di riproduzione per pausa e poi cercare attraverso l'interpolazione:

const controls = tween (duration: 1000, from: 0, to: 300). start (ballStyler.set ('x')); controls.pause (); controls.seek (0,5);

Con questo, possiamo creare un'animazione scrubbable! In un prossimo tutorial, esploreremo come usare Popmotion pointer funzione per creare una barra di scorrimento, ma per ora è possibile scrub uno gemello con un secondo tween, per vedere questo in azione:

const controls = tween (from: 0, to: 300). start (ballStyler.set ('x')); controls.pause (); interpolazione (durata: 1000) .start (controls.seek);

I fotogrammi chiave

Per semplici transizioni da a-b, gemello è eccellente. Per sequenze più complesse di interpolazioni, Popmotion offre un'altra funzione chiamata i fotogrammi chiave.

Importiamolo ora:

const keyframes, easing, tween, styler = popmotion;

i fotogrammi chiave interpolazioni attraverso aserie di stati lineari. Forniamo questi stati al suo valori proprietà:

fotogrammi chiave (valori: [0, -150, 150, 0], durata: 2000). start (ballStyler.set ('x'));

Piace gemello, possiamo anche definire questi stati come oggetti. Quindi per muovere la palla in un quadrato, possiamo scrivere:

fotogrammi chiave (valori: [x: 0, y: 0, x: -150, y: -150, x: -150, y: 150, x: 150, y: 150,  x: 150, y: -150, x: 0, y: 0], durata: 2000). start (ballStyler.set);

Di default, i fotogrammi chiave assegnerà ciascuna di queste interpolazioni a una quota uguale di quella complessiva durata.

Fornendo a volte array, possiamo contrassegnare ciascuno di questi stati con un numero compreso tra 010 rappresenta l'inizio dell'animazione, e 1 rappresenta la fine:

fotogrammi chiave (valori: [0, -150, 150, 0], ore: [0, 0,1, 0,9, 1], durata: 2000). start (ballStyler.set ('x'));

In questo modo, possiamo regolare la lunghezza dell'animazione senza dover commentare ogni singolo segmento.

Permette anche ad ogni animazione di essere personalizzata con il easing proprietà:

fotogrammi chiave (valori: [0, -150, 150, 0], tempi: [0, 0,1, 0,9, 1], attenuazioni: [easing.easeIn, easing.linear, easing.easeOut], durata: 2000). avviare (ballStyler.set ( 'x'));

Perché i fotogrammi chiave è solo un gemello, possiamo regolare la sua riproduzione generale con tutte le stesse proprietà come alleviareciclo continuo, e controllalo con tutti gli stessi metodi che abbiamo imparato in precedenza.

Conclusione

Il gemelloi fotogrammi chiave le funzioni ti permettono di creare animazioni sia semplici che complesse.

styler porta i propri vantaggi, come l'utilizzo al di fuori delle animazioni, la standardizzazione dei modelli di trasformazione CSS e SVG e il rendering di batch per prestazioni di animazione elevate.

In questo tutorial, abbiamo coperto solo un paio delle animazioni offerte da Popmotion. Nella prossima puntata, esploreremo il puntatore e le animazioni basate sulla velocità come fisicaprimavera.

Le animazioni basate sulla velocità possono essere utilizzate per creare interfacce utente naturali che reagiscono realisticamente all'input dell'utente. Ci vediamo lì!