Animación web suave y sedosa con Velocity.js

La animación, cuando se aplica cuidadosamente, puede mejorar las interfaces del sitio web y, en última instancia, la experiencia del usuario de un sitio web. En este tutorial, veremos VelocityJS, un motor de animación de JavaScript para animaciones de rendimiento rápido. VelocityJS se ha convertido en una de mis preferencias cuando se trata de la animación en la web. Las razones son, en mi opinión, las siguientes:

  • Es simplemente mejor. VelocityJS es tan rápido como CSS y ofrece un mejor rendimiento que su contraparte jQuery, especialmente en dispositivos móviles. Este rendimiento es mucho mejor que incluso hubo una discusión para reemplazar la animación central de jQuery con VelocityJS, algo que, por desgracia, no sucederá. La animación CSS, aunque rápida, está limitada en términos de soporte de navegador. VelocityJS es confiable desde IE8!
  • RunSequence FTWRunSequence es un método en VelocityJS que podemos usar para realizar pilas de animación consecutivamente. Es un enfoque más elegante que el encadenamiento de funciones de animación, como en jQuery. Hacer esto solo con CSS no es práctico.
  • Curva de aprendizaje magra. VelocityJS proporciona similar sintaxis para jQuery. Esto nos permite saltar de jQuery a VelocityJS y captar la API rápidamente.

En este tutorial, veremos lo esencial para realizar animaciones con VelocityJS. También destacaremos algunas características que podrían mejorar nuestro diseño de interfaz de usuario. Entonces, vamos a empezar!

Ejecutando animaciones básicas

Con jQuery, asumiendo que nos gustaría deslizar un div a la derecha, escribiríamos algo como:

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

Casi exactamente de la misma manera, lo escribiríamos así con VelocityJS:

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

Ambos ejemplos moverán el div por 500px a la derecha durante tres segundos observando el elemento izquierda propiedad. La diferencia visible en la sintaxis es el método que se usa para animar el elemento que usa VelocityJS .velocidad() en lugar de jQuery .animar()

También puede notar la discrepancia de rendimiento. La animación de jQuery a veces se siente algo inestable, mientras que VelocityJS funciona como la mantequilla de principio a fin. Darle una oportunidad:

Animando diferentes propiedades CSS

VelocityJS acepta una serie de propiedades CSS, así como su versión de mano larga para manipular el elemento. Podemos usar estas propiedades juntas en una sola instancia de VelocityJS para realizar una animación sofisticada. Por ejemplo:

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

En este segundo ejemplo, hemos tratado el div con varias propiedades CSS, incluyendo anchura para hacerlo más pequeño, color de fondorellenosombra de la caja, y radio del borde transformarlo en un círculo.

Observe que las propiedades que comprenden dos o más palabras están formateadas en el caso de Carmel formato, siguiendo la convención de nomenclatura de JavaScript, por lo tanto radio del borde se convierte en fronteraRadio Etcétera. También aceleramos la duración a solo 350 milisegundos y, esta vez, optamos por easeInQuad ya que VelocityJS tiene la facilidad de uso de jQuery UI incorporada.

Atajos de animación

jQuery proporciona algunos métodos para realizar animaciones comunes, como .deslizar hacia arriba() y .fadeOut (), que hacen desaparecer gradualmente los elementos. Así que no es de extrañar que VelocityJS también lo haga. VelocityJS proporciona algunos accesos directos para pasar a un .VelocityJS () ejemplo.

Escribiríamos lo siguiente para deslizar un elemento hacia arriba para ocultar el contenido:

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

Para desvanecerlo, escribiríamos:

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

Voluta

VelocityJS también proporciona un acceso directo llamado voluta que puede ser útil para crear enlaces que conducen a una sección particular en la página. El siguiente código asume que queremos el enlace., # go-up, para volver a la parte superior de la página al hacer clic.

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

Esto es lo que podría parecer:

Marcha atrás

Otro atajo útil incluido viene en forma de marcha atrás. Este acceso directo nos permite revertir el elemento a su estado inicial una vez que se completa la animación. Tomando el ejemplo de desplazamiento anterior, podemos aplicar marcha atrás para mejorar los iconos de flecha. Para ello, encadenamos una nueva instancia de VelocityJS con marcha atrás añadido, estableciendo el lazo opción a cierto.

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

Esto moverá el ícono hacia abajo 10px Inmediatamente después, vuelva a su posición inicial. Como también hemos establecido el lazo opción a cierto La animación se realizará de forma indefinida..

Plugin: UI Pack

Más efectos de animación están disponibles en UI Pack. El paquete de UI está disponible como un complemento, separado del núcleo de VelocityJS. Una vez que lo hayas incluido, tendrás acceso a una variedad de efectos más allá de deslizar hacia arribadesvanecimiento, y voluta Abriendo un potencial aún mayor para construir interfaces animadas.

 

UI Pack también trae dos nuevas opciones: tambalear y arrastrar. los tambalear nos permite realizar un solo efecto, aplicado a una matriz de elementos secuencialmente en lugar de simultáneamente. los arrastrar opción, cuando se establece en verdadero, da una sensación de arrastrando para el último elemento de la matriz.

Como ejemplo, he creado una barra de navegación con algunos menús, uno de los cuales tiene un submenú. Para hacer que el submenú sea más atractivo, he aplicado dos efectos del Paquete de UI con el tambalear conjunto de opciones.

Animaciones múltiples secuencialmente

En algún momento, es posible que tengamos que realizar animaciones en diferentes elementos en secuencia. Para hacerlo, tenemos que anidar cada instancia de VelocityJS en orden, por ejemplo:

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

La función anterior realizará primero la animación del $ cuerpo, entonces $ nav Una vez que esté completo, y por último el $ menú. Desafortunadamente, este no es un enfoque elegante, ni ideal. Si tiene una docena de animaciones, el código no sería práctico de administrar.

Sin embargo, además de los efectos de animación, el paquete UI viene con un método llamado RunSequence. Esto está diseñado precisamente para resolver nuestros problemas de secuenciación; para apilar animaciones cuidadosamente y ejecutarlas en su orden correspondiente. Tomando el código anterior, podríamos reescribirlo como un objeto de JavaScript con el elemento seleccionado definido dentro de un mi propiedad, las propiedades CSS listadas en un pag propiedad, mientras que las opciones de animación se establecen en el o propiedad.

var animationSequence = [e: $ ("# offcanvas"), p: translateX: 0, o: duration: 300, e: $ (". widget"), p: translateX: 0, opacidad: 0, o: duración: 300, e: $ ("# cerrar"), p: translateY: 0, rotateZ: 0, o: duration: 150]; $ .Velocity.RunSequence (animationSequence); 

He extendido el código anterior a un diseño fuera de lienzo que funciona. Entréguelo y echa un vistazo a la pestaña de JavaScript para ver el código fuente completo.fffffff

Pensamiento final

Considero que VelocityJS es una alternativa preferible a la animación jQuery y CSS, particularmente cuando se trata de construir interfaces interactivas que involucran múltiples animaciones. VelocityJS es fácil de usar, está lleno de animaciones predefinidas y, sobre todo, es rápido. Úsalo responsablemente. Como se suele decir: con grandes características conlleva gran responsabilidad..