Silky Smooth Web Animation con Velocity.js

L'animazione, se applicata con cura, può migliorare le interfacce del sito Web e, in definitiva, l'esperienza utente di un sito web. In questo tutorial, esamineremo VelocityJS, un motore di animazione JavaScript per animazioni rapide. VelocityJS è diventato una delle mie preferenze quando si tratta di animazione sul web, le ragioni sono, a mio parere:

  • È semplicemente migliore. VelocityJS è veloce quanto i CSS e offre prestazioni migliori rispetto alla sua controparte jQuery, in particolare sui dispositivi mobili. Questa performance è molto meglio che c'è stata anche una discussione per sostituire l'animazione core di jQuery con VelocityJS, qualcosa che, sfortunatamente, non accadrà. L'animazione CSS, sebbene veloce, è limitata in termini di supporto del browser. VelocityJS è affidabile fin da IE8!
  • RunSequence FTWRunSequence è un metodo di VelocityJS che possiamo usare per eseguire sequenze di animazione consecutivamente. È un approccio più elegante che concatenare le funzioni di animazione, come in jQuery. Farlo solo con i CSS non è pratico.
  • Curva di apprendimento snella. Fornisce VelocityJS simile sintassi su jQuery. Questo ci permette di passare da jQuery a VelocityJS e cogliere rapidamente l'API.

In questo tutorial illustreremo gli elementi essenziali per realizzare animazioni con VelocityJS. Evidenzieremo anche alcune funzionalità che potrebbero migliorare il nostro design dell'interfaccia utente. Quindi, iniziamo!

Esecuzione di animazioni di base

Con jQuery, assumendo vorremmo far scorrere a div a destra, scriveremmo qualcosa come:

$ ("div"). animate (left: "500px",, duration: 3000, easing: "linear"); 

Quasi nello stesso modo, lo scriveremo in questo modo con VelocityJS:

$ ("div"). velocity (left: "500px",, duration: 3000, easing: "linear"); 

Entrambi gli esempi sposteranno il div di 500px a destra per tre secondi osservando l'elemento sinistra proprietà. La differenza visibile nella sintassi è il metodo utilizzato per animare l'elemento, VelocityJS utilizza .velocità() invece di jQuery .animare()

Si può anche notare la discrepanza di prestazione. L'animazione jQuery a volte sembra un po 'traballante, mentre VelocityJS funziona come un burro dall'inizio alla fine. Provaci:

Animazione di diverse proprietà CSS

VelocityJS accetta un numero di proprietà CSS e una versione a mano lunga per manipolare l'elemento. Possiamo utilizzare queste proprietà insieme in una singola istanza di VelocityJS per eseguire un'animazione sofisticata. Per esempio:

$ ("div"). velocity (borderRadius: "25px", larghezza: "45px", paddingLeft: "0", paddingRight: "0", backgroundColor: "# 8CC152", colore: "#fff", borderColor: "# 8CC152", boxShadowX: "0", boxShadowY: "0", duration: 350, easing: "easeInQuad"); 

In questo secondo esempio, abbiamo trattato il div con diverse proprietà CSS, tra cui larghezza per renderlo più piccolo, colore di sfondoimbottiturabox-ombra, e border-radius per trasformarlo in un cerchio.

Si noti che le proprietà che comprendono due o più parole sono formattate in camelCase formato, seguendo la convenzione di denominazione JavaScript, quindi border-radius diventa borderRadius e così via. Inoltre acceleriamo la durata a soli 350 millisecondi e, questa volta, optiamo per easeInQuad come VelocityJS ha l'easing integrato di jQuery UI.

Scorciatoie di animazione

jQuery fornisce alcuni metodi per eseguire animazioni comuni, come ad esempio .scorrere verso l'alto() e .dissolvenza(), che fanno scomparire gradualmente gli elementi. Quindi non sorprende che anche VelocityJS. VelocityJS fornisce alcune scorciatoie da passare in a .VelocityJS () esempio.

Scriveremo quanto segue per far scorrere un elemento per nascondere il contenuto:

$ ("div"). velocity ("slideUp", duration: 350); 

Per svanire, scriveremmo:

$ ("div"). velocity ("fadeOut", duration: 350); 

Scorrere

VelocityJS fornisce anche una scorciatoia chiamata scorrere che potrebbe rivelarsi utile per creare collegamenti che conducono a una particolare sezione della pagina. Il seguente codice presuppone che vogliamo il collegamento, #vai su, per tornare alla parte superiore della pagina quando si fa clic.

var $ up = $ ("# go-up"); $ up.on ("click", function () $ ("body"). velocity ("scroll", duration: 2000, easing: "easeInBack");); 

Ecco come potrebbe essere:

Inverso

Un'altra scorciatoia pratica inclusa si presenta sotto forma di inverso. Questo collegamento ci consente di ripristinare l'elemento al suo stato iniziale una volta completata l'animazione. Prendendo l'esempio di scorrimento precedente, possiamo applicare inverso per migliorare le icone delle frecce. Per fare ciò, associamo una nuova istanza di VelocityJS inverso aggiunto, impostando il ciclo continuo opzione a vero.

$ (". icon"). velocity (translateY: "10px", loop: true). velocity ("reverse"); 

Questo sposterà l'icona di 10px quindi immediatamente torna alla sua posizione iniziale. Come abbiamo anche impostato il ciclo continuo opzione a vero l'animazione si esibirà a tempo indeterminato.

Plugin: UI Pack

Ulteriori effetti di animazione sono disponibili in UI Pack. Il pacchetto UI è disponibile come plug-in, separatamente dal core VelocityJS. Una volta incluso, avrai accesso a una serie di effetti oltre scorrere verso l'altodissolvenza, e scorrere aprendo un potenziale ancora maggiore per costruire interfacce vivaci.

 

UI Pack offre anche due nuove opzioni: barcollare e trascinare. Il barcollare ci consente di eseguire un singolo effetto, applicato a una matrice di elementi sequenzialmente invece di simultaneamente. Il trascinare opzione, se impostata su true, dà un senso a trascinamento per l'ultimo elemento nella matrice.

Ad esempio, ho creato una barra di navigazione con alcuni menu, uno dei quali ha un sottomenu. Per rendere il sottomenu più coinvolgente, ho applicato due effetti dall'interfaccia utente al barcollare set di opzioni.

Animazioni multiple in sequenza

Ad un certo punto, potremmo aver bisogno di eseguire animazioni su diversi elementi in sequenza. Per fare ciò, dobbiamo annidare ogni istanza di VelocityJS in ordine, ad esempio:

$ ("# offcanvas"). velocity (translateX: 0, duration: 300,, function () $ (". widgets"). VelocityJS (translateX: 0, opacità: 0, durata: 300,, function () $ ("# close"). VelocityJS (translateY: 0, rotateZ: 0, duration: 150););); 

La funzione precedente eseguirà prima l'animazione di $ corpo, poi $ nav una volta completato, e infine il menu di $. Sfortunatamente, questo non è un approccio elegante, né ideale. Se hai dozzine di animazioni, il codice sarebbe poco pratico da gestire.

Tuttavia, oltre agli effetti di animazione, l'UI Pack viene fornito con un metodo chiamato RunSequence. Questo è progettato proprio per risolvere i nostri problemi di sequenziamento; per impilare ordinatamente le animazioni ed eseguirle nel loro ordine pertinente. Prendendo il codice di cui sopra, potremmo riscriverlo come un oggetto JavaScript con l'elemento selezionato definito all'interno di un e proprietà, le proprietà CSS elencate in a p proprietà, mentre le opzioni di animazione sono impostate in o proprietà.

var animationSequence = [e: $ ("# offcanvas"), p: translateX: 0, o: durata: 300, e: $ (". widget"), p: translateX: 0, opacità: 0, o: duration: 300, e: $ ("# close"), p: translateY: 0, rotateZ: 0, o: duration: 150]; $ .Velocity.RunSequence (animationSequence); 

Ho esteso il codice di cui sopra in un layout funzionante su tela. Daglielo, e dai un'occhiata alla scheda JavaScript per vedere il codice sorgente completo.fffffff

Pensiero finale

Trovo che VelocityJS sia un'alternativa preferibile all'animazione jQuery e CSS, in particolare quando si tratta di creare interfacce interattive che coinvolgono più animazioni. VelocityJS è facile da usare, ricco di animazioni predefinite e, soprattutto, lo è veloce. Usalo responsabilmente. Come spesso si dice: con grandi caratteristiche derivano grandi responsabilità.