Animación y Vue.js

Rate this content
Bookmark

Hay mucho que ganar al agregar animaciones a tu sitio o aplicación. Más allá de su atractivo visual, puedes guiar la atención del usuario, cubrir componentes y elementos lentos de carga, y revelar secciones de una página sin que el usuario se pregunte de dónde provienen. Esta charla cubrirá las formas incorporadas en Vue.js que te ayudan a animar tu sitio, y cómo, para animaciones más complicadas, puedes utilizar bibliotecas de terceros. También se abordarán los conceptos básicos de la animación en sí: qué animar y qué no animar, y cómo puedes utilizar las animaciones para mejorar tu sitio web sin perjudicar la experiencia de las personas con discapacidades.

32 min
20 Oct, 2021

Video Summary and Transcription

La charla de hoy cubre la animación en aplicaciones de Vue JS, incluyendo animaciones CSS, animaciones JavaScript utilizando la biblioteca GSAP, y manejo de múltiples elementos con grupos de transición. También se discuten diferentes tipos de movimientos, transiciones de estado y animación de números y SVGs. En general, proporciona una visión general completa de las técnicas y herramientas de animación para mejorar las aplicaciones de Vue JS.

Available in English

1. Introducción a la animación en aplicaciones Vue JS

Short description:

Hoy hablaré sobre la animación en tu aplicación Vue JS. Cómo puedes usar la animación para mejorar tu aplicación, por qué deberías hacerlo y cuándo tal vez no deberías animar tu aplicación. Las animaciones son una buena manera de guiar la atención o distraer a los usuarios. Si agregas demasiadas animaciones a tu sitio, será totalmente inutilizable. Nadie podrá leer tu texto completo.

Hoy hablaré sobre la animación en tu aplicación Vue JS. Cómo puedes usar la animación para mejorar tu aplicación, por qué deberías hacerlo y cuándo tal vez no deberías animar tu aplicación.

Mi nombre es Callum. Soy un desarrollador creativo con sede en Londres. He escrito un libro llamado Vue JS Up & Running publicado por O'Reilly Media. Si estás en Twitter, ese es mi nombre de usuario, siéntete libre de seguirme.

Entonces, pensé que comenzaríamos directamente con el por qué. ¿Por qué querrías agregar animaciones a tu sitio? Además del obvio atractivo visual, como que las animaciones se ven bien. Esa es una razón válida para agregar animaciones. Hay algunas razones funcionales por las que podrías querer agregar animaciones a tu sitio. Las animaciones son una forma muy buena de guiar a los usuarios por tu aplicación. Por ejemplo, podrías tener un llamado a la acción que quieres que vean, o podrías querer que vayan a la siguiente página. Puede que hayan cometido un error en un formulario y quieres alertarles. Las animaciones ayudarían en estos escenarios, al dirigir la atención del usuario hacia esta parte de la página.

Como mencioné antes, las animaciones son una buena manera de guiar la atención o distraer a los usuarios. Otro caso sería si tienes una página que carga bastante lento. Si muestras un signo de carga o algún tipo de animación, el usuario percibirá que la página ha cargado un poco más rápido. Pero por supuesto, demasiada distracción es muy malo. Si agregas demasiadas animaciones a tu sitio, será totalmente inutilizable. Nadie podrá leer tu texto completo. Y esto es especialmente malo para personas con algunas discapacidades, como personas con TDAH o personas con algunos trastornos vestibulares que se verán muy afectadas por demasiada animación. Así que debes tener cuidado con eso.

Entonces, pensé que podríamos hacer que la mayor parte de esta charla sea una gran demostración. No me gustan mucho las diapositivas, aunque parezcan diapositivas. Así que aquí está nuestra primera cosa. Es solo en esta página, es este menú aquí. Estoy seguro de que si has estado en Internet antes, lo cual supongo que sí, especialmente si estás viendo esto en streaming, habrás visto este tipo de menú antes. Haces clic en un botón y el menú aparece desde el costado. Y esto es algo, probablemente una de las animaciones que más he implementado en aplicaciones VGS. Así que veamos el código que alimenta esto.

2. Animación en aplicaciones Vue JS

Short description:

Tenemos nuestro estado de menú abierto, que puede ser verdadero o falso. Este es nuestro menú, que estamos usando la directiva v-show. El componente de transición agrega clases al elemento de menú para las transiciones CSS. El menú está inicialmente fuera de la pantalla y se desplaza desde la derecha cuando se agrega al DOM. La propiedad de transición CSS se utiliza para animar la propiedad de transformación, con una duración de 0.3 segundos y utilizando un easing. La clase de salida tiene una animación diferente. El menú se mueve lentamente y luego acelera cuando sale.

Aquí te lo explicaré brevemente. Tenemos nuestro estado de menú abierto, que puede ser verdadero o falso. Luego, aquí, este es nuestro menú, que estamos usando la directiva v-show para que cuando la referencia sea verdadera, el menú esté abierto, de lo contrario, no se agregará al DOM.

Y verás que tenemos este componente de transición envuelto alrededor. Entonces, lo que hace esto es que es un componente incorporado en Vue. Esto significa que cuando cambia el estado, cuando el menú abierto cambia de falso a verdadero, no solo se agrega al DOM, sino que se le agregan un montón de clases, que puedes usar para, en este caso, agregar una transición CSS.

Entonces, aquí, lo que podemos ver es que esta clase es, por lo que cuando se agrega este elemento al DOM, se agrega con esta clase enter-from. Entonces tiene una transformación CSS, que lo desplaza hacia la derecha en un 100%, que en este caso sería el ancho del menú. Entonces, efectivamente, cuando se agrega a la pantalla, el menú está justo fuera de la pantalla aquí. Así que, puedes imaginar que está ligeramente fuera de la pantalla. Presionas el botón, entra en la pantalla. Eso es lo que significa esta traducción, traducir x 100%, traducirlo en la dirección x, 100%, que en este caso es el 100% del ancho de esto.

Entonces, lo siguiente que hace Vue una vez que ha agregado esta clase y ha agregado este elemento al DOM, es agregar esta clase llamada interactive, que usamos para agregar una transición, que usamos una transición CSS, y luego elimina esta clase para que la nueva transformación no esté definida, por lo que efectivamente, se traducirá a ninguna parte. Estará en su posición natural en el DOM, que es aquí. Entonces, lo que hace la propiedad de transición CSS es, en este caso, estamos diciendo que haga la transición de la propiedad de transformación, que tome 0.3 segundos para hacerlo y use este easing. Volveré a hablar sobre el easing en un segundo. Pero efectivamente, lo que hace es que puedes darle varias propiedades CSS y significa que cuando cambie, no lo cambies de inmediato, haz la transición desde el valor anterior al nuevo valor en este tiempo. Entonces, en este caso, estamos diciendo que queremos que nuestra transformación CSS, que va desde la traducción hacia la derecha hasta nada, porque se está eliminando la clase, y que tome 0.3 segundos para hacerlo. La explicación es un poco complicada. Pero espero que en el contexto de ver lo que hace el menú, tenga sentido. Esa es la clase enter. Tenemos una clase ligeramente diferente para leave. Así que puedes combinarlas en una dependiendo de lo que quieras hacer. Verás en algunos de mis ejemplos posteriores, tendré enter-active y leave-active en la misma regla. Y luego solo tendré esto, la transformación y 0.3 segundos. En este caso, sin embargo, tenemos algunos easings. Tenemos ease-out en la entrada y ease-in en la salida. Y eso no tendrá sentido si no sabes lo que significa. Así que te lo mostraré. Así que si observas este menú entrar y salir, verás que cuando sale, comienza moviéndose lentamente y luego acelera.

3. Comprensión de las funciones de aceleración en la animación

Short description:

Puedes ver que al usar ease out y ease in, la animación comienza moviéndose rápidamente y luego se desacelera hacia el final. Este efecto se logra utilizando diferentes funciones de aceleración, que se pueden encontrar en MDN y en el sitio web gsat. Estos recursos proporcionan explicaciones y gráficos para ayudarte a comprender las funciones de aceleración.

Puedes verlo más o menos. Y luego, en el camino de entrada, hace lo contrario. Comienza moviéndose rápidamente y luego se desacelera hacia el final. ¿Lo ves? Entonces eso es lo que significa ease out y ease in. Ease out significa que estamos utilizando una función de aceleración que no solo se traduce desde esta posición hasta esta posición de manera lineal, y luego se detiene de golpe. Significa que se desacelera. Así que comienza rápido y luego se desacelera. Hay muchas funciones de aceleración diferentes disponibles. MDN tiene una página que las explica todas y algunos gráficos. El sitio web gsat, del que hablaremos más adelante, tiene una serie de gráficos animados que también son muy útiles para comprender las funciones de aceleración.

4. Animaciones CSS y Keyframes

Short description:

Aquí está nuestra animación CSS. Estamos utilizando una animación CSS en lugar de una transición. La propiedad de animación te permite configurar keyframes para definir los estados de la animación. Por ejemplo, al 0% la opacidad se establece en 0, haciendo que el texto sea transparente. Al 50%, la opacidad se establece en 1, haciendo que el texto sea completamente visible. También tenemos una transformación más complicada, que incluye traslación, escala y rotación.

Genial. Así que eso son las transiciones CSS. Lo siguiente que veremos son las animaciones CSS, que nos permiten hacer cosas un poco más complicadas.

Aquí está nuestra animación CSS. Nuevamente, estamos utilizando nuestro componente de transición. Es bastante similar a cómo funciona el último. En lugar de un botón de menú, tenemos un botón separado en el DOM que estamos utilizando para animarlo en lugar del botón de menú. Pero sigue siendo la misma idea. Tenemos algo que es verdadero o falso y estamos usando Vshow aquí.

La diferencia principal aquí es que estamos utilizando una animación CSS en lugar de una transición. Verás aquí que tenemos la propiedad de animación en lugar de la propiedad de transición, aunque estamos utilizando las mismas clases en su mayoría. Lo que hace esto es una animación CSS, en lugar de simplemente decir que tienes una transición que va de un lugar a otro, te permite configurar keyframes. Entonces estás diciendo lo que quieres que suceda en cada estado de la animación. Estás diciendo que quieres que la animación... Con 0% estás diciendo que la animación comience aquí, al 50% del tiempo que ha transcurrido la animación quieres esto. Y luego el 100% es donde quieres que termine.

Entonces aquí tenemos... Si comenzamos mirando la opacidad, la animación dura 0.7 segundos. Lo que tenemos aquí es que a los 0 segundos, justo después de hacer clic en el botón, la opacidad es 0. Entonces no podrás ver el texto, estará completamente transparente. Y luego, debido a que son 0.7 segundos, al 50% de eso, que es 0.35 segundos, la opacidad se establece en uno. Por lo tanto, está completamente visible a la mitad de la animación, lo cual no podríamos hacer sin la transición CSS, porque solo puedes tener... Efectivamente, solo puedes establecer 0% y 100%. No puedes establecer las partes intermedias.

Además de eso, tenemos una transformación más complicada. Entonces, en la última diapositiva, en la última demostración, teníamos una transformación de traslación. Pero en esta, también estamos agregando escala y rotación, que son otras dos propiedades admitidas por transformación. Entonces, en esta, en el 0%, estamos comenzando con una traslación hacia arriba y hacia la izquierda. Y luego una escala muy pequeña hacia la derecha.

5. Animando Objetos y Rendimiento

Short description:

Entonces, escalado significa hacer que un objeto sea más pequeño, y rotar es rotación. Lo estamos rotando hacia la izquierda en tres grados. Luego, a mitad de la animación, se transforma para ir hacia abajo y hacia la derecha, un poco más grande y rotado en la dirección opuesta. Sesgar es una propiedad que mueve un lado de un rectángulo, haciéndolo sesgado. Al animar, solo las transformaciones y la opacidad pueden ser animadas con rendimiento, ya que no desencadenan un repintado. Otras propiedades como la altura y el color se pueden animar pero pueden no tener un buen rendimiento. Las transformaciones y la opacidad están aceleradas por hardware y son más eficientes. Sin embargo, ten cuidado, ya que animar otras propiedades puede afectar el rendimiento.

Entonces, escalado significa tomar un objeto como este y hacerlo más pequeño. Y rotar es rotación. Así que lo estamos rotando en tres grados hacia la izquierda. Luego, a mitad de la animación, tenemos una transformación separada, va hacia abajo y hacia la derecha de donde terminará. Se vuelve un poco más grande y se rota en la dirección opuesta. Y luego, al final, lo volvemos a establecer como debería ser normalmente. Entonces, cuando se elimine esta animación, se verá como debería, no habrá saltos. Así es como se ve eso.

Podemos ver que comienza alrededor de aquí, salta hacia abajo aquí y luego vuelve a este punto. Se desvanece en la primera mitad de la animación. A mitad de la animación, es completamente visible. Además de la traducción, la escala y la rotación, también hay una propiedad adicional llamada sesgar, que, si puedes imaginar un rectángulo como ese, sesgarlo ligeramente... Mueve uno de los lados, por lo que es como uno de los lados superiores o inferiores, así, lo hace sesgado. En realidad, nunca lo he usado.

Sí, pensé que ahora que tenemos esto abierto, sería un buen momento para hablar sobre el rendimiento, tal vez no hayas visto esto antes y estés pensando, wow, ahora puedo animar todo. Puedo animar la altura. Puedo animar el color. En teoría, sí, puedes animar la altura. Puedes animar el color. Algunas de las demostraciones más adelante estaré animando el color, pero no son animaciones con rendimiento. Las únicas cosas que puedes animar con rendimiento son las transformaciones y la opacidad. La razón de esto es que son las únicas cosas que no desencadenan un repintado. Entonces, si tomamos el menú que vimos en el último ejemplo, que entra desde la derecha de la pantalla. Podrías pensar que podemos posicionar absolutamente el menú y luego animar la propiedad derecha. Puedes hacer eso, pero no se animará a 60 cuadros por segundo, se verá entrecortado, no se verá genial. Porque cada vez, en cada fotograma, una vez que la propiedad derecha cambia un poco, el navegador tiene que mirar todo lo demás en la página o todo lo cercano para averiguar si eso se ha movido como resultado. Mientras que con la transformación y la opacidad, no tiene que mirar ningún otro elemento. Por lo tanto, estas pueden ser aceleradas por hardware, son mucho más eficientes que cualquier otra cosa. Puedes usar otras cosas. Intenta usar estas cuando puedas, pero a veces querrás animar algunas cosas que estas simplemente no pueden animar. Pero ten en cuenta que podría afectar el rendimiento.

6. VShow versus Vif

Short description:

VShow y Vif son directivas que muestran y ocultan elementos. VShow oculta el elemento con display none, mientras que Vif lo elimina por completo del DOM. Usa VShow cuando un elemento se está eliminando y agregando múltiples veces, y Vif cuando un elemento solo aparece una vez y no se verá nuevamente.

Además, he estado usando principalmente VShow. Pensé que ahora sería un buen momento para hablar sobre Vif versus VShow. Ambos son directivas que muestran y ocultan un elemento. Entonces, si lo cambias a Vif, se vería exactamente igual. La diferencia entre VShow y Vif es que con VShow el texto todavía está en el DOM. Simplemente está oculto con display none. Mientras que con Vif se eliminaría por completo del DOM. Entonces, si algo se está eliminando y agregando varias veces, generalmente quieres usar VShow. Pero si algo solo aparece una vez y luego nunca se verá nuevamente, ahí es donde Vif es beneficioso. Quiero decir, en este contexto, porque no se agrega y elimina con tanta frecuencia, probablemente no importe tanto. Pero si puedes imaginar, digamos que tienes un componente grande con un iframe de YouTube anidado dentro de él. No quieres estar agregando y eliminando eso del DOM repetidamente.

7. JavaScript Animations and GSAP Library

Short description:

A continuación, pasemos a las animaciones de JavaScript. Las animaciones de JavaScript son útiles cuando deseas animaciones más complicadas o cuando las animaciones de CSS se vuelven demasiado complicadas. GSAP (GreenSock animation platform) es una biblioteca ampliamente utilizada para animaciones de JavaScript y funciona bien con Vue. También hay otras bibliotecas de animación disponibles.

Genial, eso es sobre las animaciones de CSS. A continuación, pasemos a las animaciones de JavaScript. Hasta ahora, todos los ejemplos que hemos visto han sido impulsados por CSS, pero muchas animaciones en la web son impulsadas por JavaScript. Esto puede ser porque queremos animaciones más complicadas. Por ejemplo, podrías querer... Bueno, supongo que este es un ejemplo. En esta animación, puedes ver que cuando entra, el fondo entra primero, luego el texto entra, luego este texto entra, luego el subtítulo entra después, y lo mismo con el diseño. Todos entran en diferentes momentos.

Ahora, podrías hacer esto con una animación de CSS. No sería muy divertido, trabajar en todos los tiempos, y especialmente porque tienen sus propias aceleraciones, podrías hacerlo con una animación de CSS. Simplemente no sería muy divertido hacerlo. Sería un poco complicado. En general, querrías... Quiero decir, este también es un ejemplo simple. Puedes complicarlo mucho más que esto, y entonces definitivamente no querrías usar animaciones de CSS. Aquí es donde las animaciones de JavaScript son útiles.

Si observamos el código de este, puedes ver que hay un poco más de código. Ten paciencia. Para esto, estamos importando una biblioteca llamada GSAP, que significa GreenSock animation platform. Es una biblioteca muy utilizada. Muchos sitios web la utilizan. Yo la uso mucho en mi trabajo. Es una buena biblioteca. Es divertida. Y funciona bien con Vue. También hay otras bibliotecas, como animajs, disponibles. Hay muchas bibliotecas de animación. No es necesario que uses esta. Entonces, aquí todavía estamos usando nuestro componente de transición. Lo hemos usado para los primeros tres ejemplos.

8. Listening to Events and Chaining Animations

Short description:

En este caso, estamos escuchando dos eventos: Enter y Leave. Cada evento llama a una función de controlador diferente. Configuramos una línea de tiempo de GSAP para encadenar múltiples animaciones juntas. El elemento de fondo se mueve de forma independiente al elemento real, y los elementos de encabezado y texto entran uno tras otro. La animación lleva al elemento desde Y igual a 50 y opacidad cero a Y igual a cero y opacidad uno, utilizando la resolución automática de la propiedad Y de GSAP a transformaciones.

Pero en este caso, estamos escuchando dos eventos. Estamos escuchando el evento Enter y estamos escuchando el evento Leave. Y ambos llaman a diferentes controladores. Entonces, si tomamos el evento Enter, llama a la función handleEnter, que está aquí arriba. Por lo tanto, está pasando dos argumentos. El primero es el elemento. Entonces, es este elemento. Volveré al otro argumento en un minuto.

Y lo que estamos haciendo aquí es configurar una línea de tiempo de Gsap. Una línea de tiempo de GSAP es una forma de encadenar múltiples animaciones juntas. Entonces, en este caso, tenemos nuestro elemento de fondo. Tenemos un elemento separado para el fondo porque se mueve de forma independiente al elemento real. Entonces, notarás que si lo muestro y lo oculto, se sale del elemento real. Por eso tenemos un elemento de fondo separado. Y tenemos nuestro encabezado y nuestro texto. Y todos entran uno tras otro, lo cual es para lo que las líneas de tiempo de GSAP son realmente buenas.

Entonces, esto se sale un poco del alcance de esta charla, así que no entraré en detalles. Pero explicaré brevemente lo que hace esto. Esto está animando. Está tomando este elemento. Lo está animando desde Y igual a 50, opacidad cero. Hacia abajo ligeramente y transparente. Y lo está animando a Y igual a cero. Su posición original, y opacidad uno. Y tarda 0.9 segundos en hacerlo. Puede haber notado en el ejemplo anterior, dije que siempre se debe animar la traducción, no ninguna otra forma de mover un elemento. Y esto tiene esta propiedad Y. GSAP resuelve automáticamente eso a transformaciones. Es una forma agradable de trabajar. En lugar de tener que tener una transformación aquí y calcularla como una cadena, eso no sería muy divertido.

9. Animation Syntax and List Animations

Short description:

Y luego tenemos esta sintaxis aquí. Esto es todo bastante similar. Luego tenemos esto que dice que queremos que esta animación comience 0.2 segundos después de la anterior. Y queremos que esta comience 0.1 segundos después de esta. El segundo argumento que se le pasa a la función es un argumento de finalización. Así es como Vue sabe que la animación está completa. En el caso de leave, si se usa un v-if, se puede eliminar por completo el elemento. Si solo se utilizan animaciones de JavaScript, pasa CSS igual a falso y no agregará las clases que vimos en las dos diapositivas anteriores, lo que mejora ligeramente el rendimiento. Lo siguiente que veremos es muy similar a este ejemplo. Si esto ya estuviera establecido en verdadero, no se habría animado y simplemente estaría allí. También tenemos otra propiedad llamada appear. Veamos eso para que podamos agregar appear aquí. Se animará cuando naveguemos a la página o volvamos a cargar la página. A continuación, veamos las animaciones de lista.

Y luego tenemos esta sintaxis aquí. Así que esto es todo bastante similar. Luego tenemos esto que dice que queremos que esta animación comience 0.2 segundos después de la anterior. Y queremos que esta comience 0.1 segundos después de esta. Y tenemos algo similar en la salida. Pero no lo explicaré en detalle.

El segundo argumento que se le pasa a la función es un argumento de finalización. Así es como Vue sabe que la animación está completa. Pasamos eso directamente a GSAP como el controlador onComplete. Y llama a Vue cuando ha terminado. Y le permite a Vue saber que puede limpiar, puede eliminar sus clases. En el caso de leave, si se usa un v-if, se puede eliminar por completo el elemento. Y lo último que debemos saber aquí es que si solo se utilizan animaciones de JavaScript, pasa CSS igual a falso y no agregará las clases que vimos en las dos diapositivas anteriores, lo que mejora ligeramente el rendimiento.

Lo siguiente que veremos es muy similar a este ejemplo. Notarás que cuando cargué la página, no estaba aquí. Y tuve que presionar el botón para que apareciera. Si esto ya estuviera establecido en verdadero, no se habría animado y simplemente estaría allí. No se habría animado. También tenemos otra propiedad llamada appear. Veamos eso para que podamos agregar appear aquí. Y si estableces esto en verdadero, lo que hará es que cuando naveguemos a la página o volvamos a cargarla, se animará. Así que simplemente actualizo la página para que puedas ver que se anima y es bastante simple. Pero es una buena manera de obtener animaciones cuando cargas la página. A continuación, hasta ahora hemos estado viendo elementos individuales o. Quiero decir, esto no es un elemento individual. Son tres elementos, pero es un hijo del componente de transición. A continuación, veamos las animaciones de lista.

10. Manejo de varios elementos con Transition Group

Short description:

Al escribir en el campo de entrada, el texto se muestra como letras separadas utilizando elementos span. La propiedad computada divide el texto en un array de letras, que luego se iteran y se agregan al DOM una letra a la vez. Para manejar varios elementos en el DOM, se utiliza un componente de transition group. Las animaciones CSS se aplican utilizando la propiedad all para transicionar todo lo que cambia. Al agregar o eliminar letras, las otras letras se deslizan a la nueva posición en lugar de saltar, gracias al manejo automático de Vue de la clase move.

Voy a escribir para mostrarte qué hace este código. Así que lo que sucede aquí es que cuando escribo aquí, se muestra como se divide en letras separadas y se muestra como elementos span. Puedes ver aquí nuestro texto en el que estamos escribiendo desde la entrada. Y luego tenemos una propiedad computada, que lo divide y lo devuelve como un array, que luego estamos iterando. Sí, lo estamos iterando y lo estamos agregando al DOM una letra a la vez.

Entonces, en nuestro transition group. Bueno, puede que no sea obvio al verlo porque solo hay un elemento escrito aquí. Pero se convierte en varios elementos en el DOM, uno por cada letra. Para esto, no podemos usar nuestro antiguo componente de transición. Nos dará un error. No funcionará. Pero en su lugar, tenemos un componente de transition group incorporado en Vue, que es realmente bueno para manejar grupos de elementos. Así que aquí estamos usando animaciones CSS. Volvemos a usar animaciones CSS. Y lo que hace este ejemplo aquí es bastante similar al ejemplo de animación. Puedes ver cuando entra y cuando sale, agregamos una transición. Aquí estamos diciendo que estamos usando la propiedad all, que en lugar de decir transform 0.4 segundos, coma opacidad 0.4 segundos, estamos diciendo que queremos animar todo, queremos transicionar todo lo que cambia. Y aquí puedes ver que lo estamos animando desde y hacia la opacidad 0 y luego lo estamos desplazando hacia abajo 30 píxeles. Así que volvamos a ver el ejemplo. Si elimino uno, se desvanece y se mueve hacia abajo. Y si agrego uno, ocurre lo contrario.

Ahora esto está bien, pero puedes ver que cuando eliminamos una letra, se mueve hacia abajo y luego cuando se elimina del DOM, las otras letras saltan. O en la dirección opuesta, cuando agregamos una, salta. Las otras letras saltan cuando agregamos una nueva al DOM. Afortunadamente, Vue tiene una forma de trabajar con esto, que te mostraré en la próxima demostración. Así que aquí puedes ver que cuando agrego la nueva letra, las otras letras se deslizan hacia la nueva posición en lugar de saltar. Y para hacer eso, es bastante simple. Hablaré sobre el resto en un segundo. Simplemente se agrega una clase move y Vue automáticamente ve que estás haciendo algo con eso. Y maneja

11. Diferentes tipos de movimientos y transiciones de estado

Short description:

También tuve que agregar esto. Tenía errores sin ello. Hay otros tipos de movimientos. Por ejemplo, esto es un generador de anagramas. Cuando presiono enter, mezcla las letras. La complicación está en las claves. La mayor parte del código se encarga de esto. La última animación que veremos son las transiciones de estado.

la posición o el cambio automáticamente. También tuve que agregar esto. No sé por qué. Tenía errores sin ello. No pude encontrarlo en la documentación. Tal vez sea un error. No lo sé. Así que sí, esto se está moviendo. Pero hay otros tipos de movimientos. Por ejemplo, vamos a ver, esto es una especie de generador de anagramas, supongo. Entonces, si presiono enter, mezcla todas las letras en una posición diferente. Y debido a que estamos usando la clase move, Vue automáticamente lo mueve por nosotros. Es realmente bueno. Sí. Entonces, una cosa a tener en cuenta, es posible que hayas notado que hay bastante código cuando lo mostré antes. Y esto se debe a que son dos estados. Tengo este texto en el orden correcto y lo tengo en el orden incorrecto. Entonces, la complicación aquí está en las claves. Si simplemente usara el orden aquí, si usara 0, 1, 2, 3, 4 como las claves, entonces esto no se animaría porque no podrías saber que he mezclado. Solo pensaría que he cambiado qué letra hay en ellos. Así que la mayor parte del código aquí se encarga de eso. El texto dividido agrega el índice y luego tenemos un nuevo texto mezclado que establece el texto mezclado en un orden diferente. Entonces, el `I` todavía está vinculado a nuestros caracteres originales. Entonces, esto sería 0, esto sería 1, lo que sea, no sé cómo usar un ratón. Uno de estos sería 2, uno de estos sería 3, no sé en qué orden. 4, 5. Y así es como Vue puede saber que lo hemos reordenado, en lugar de simplemente reemplazarlos con nuevas letras en un orden diferente. Entonces, el último tipo de animación que vamos a ver son las transiciones de estado. Entonces, aquí, esto no es realmente específico de Vue, pero funciona bien con Vue.

12. Animando Números y SVGs

Short description:

Es un número. Estamos usando gsap nuevamente para animar el estado al nuevo valor. Esta demostración muestra el uso de SVGs en animaciones. El barco nada fuera de la pantalla cuando se presiona el botón y vuelve a aparecer cuando se presiona nuevamente. El componente de transición y el elemento G en SVG se utilizan para lograr esta animación.

Entonces, aquí tenemos un estado. Solo te lo mostraré aquí. Es un número. Y luego queremos cambiarlo a un nuevo número. Entonces, si hago clic en el botón, el estado se anima automáticamente al nuevo valor. Y la forma en que esto funciona, estamos usando gsap nuevamente. Entonces, gsap, además de poder animar valores CSS y también animar propiedades en cualquier objeto. Entonces, aquí tenemos nuestra referencia de número y está animando el valor del número al nuevo valor y tarda un segundo en hacerlo. Así que eso es realmente útil a veces. Y te mostraré en la próxima demostración. Entonces, eso fue más o menos todos los diferentes tipos de animaciones que puedes hacer con GGS. Y ahora, como soy un gran fanático de los SVGs y aún no he mostrado ningún SVG en esta charla, mostraré esta demostración que los combina todos. Entonces, aquí tenemos este barco. Si presiono este botón, nada fuera de la pantalla y luego, si presiono el botón nuevamente, vuelve a aparecer en la toma. Entonces, esto usa el componente de transición nuevamente. Solo te mostraré el código para eso. Entonces, aquí puedes ver este bloque aquí. Esto es nuestro Así que esto aquí es nuestro bloque y usamos el G, por lo que el elemento G es como el elemento div en HTML porque ahora estamos en un componente SVG. Te lo mostraré. Aquí vamos. Aquí está. Entonces, todo lo que está aquí dentro está dentro de un componente SVG. Parece HTML, pero no lo es. Todavía es XML, por lo que es bastante legible. Pero es ligeramente diferente. Entonces, aquí tenemos nuestro elemento G, que significa grupo y dentro tenemos nuestro barco. Y cuando la clase G se vuelve visible, tenemos nuestra variable boat visible, que se establece en verdadero o falso por el botón. Y aquí tenemos... está envuelto en nuestro componente de transición, que ya deberías reconocer a estas alturas. Y agrega y elimina la transformación. Entonces, cuando haces clic, se va utilizando una transformación, y luego vuelve a aparecer utilizando una transformación diferente. Aquí

13. Animando Elementos y Transiciones de Estado

Short description:

Exploramos la animación de elementos que se agregan y eliminan de una matriz utilizando el grupo de transición de Vue. También discutimos las transiciones de estado utilizando un valor de tiempo que afecta a varios componentes. GSAP se utiliza para animar suavemente el número cuando se hace clic en un botón. Esta parte resume los diferentes tipos de animación en un SVG.

Para estas nubes, estamos utilizando el grupo de transición. Entonces, solo lo explicaré un poco. Está agregando más a una matriz, y luego si lo elimino, los está eliminando de la matriz, y los está animando al entrar y salir. Así que veamos eso. A la izquierda, puedes ver justo en la parte superior, tenemos nuestra matriz de nubes. Es nuestra matriz de nubes, sus posiciones y tamaños, y luego tenemos dos funciones, addCloud y removeCloud, que agregan una nueva nube o eliminan una nube. Y luego aquí a la derecha, tenemos nuestro grupo de transición, que contiene nuestras nubes, nuevamente utilizando un v4, y luego en nuestro estilo en la parte inferior, tenemos nuestro CSS, que maneja las entradas y salidas. Entonces, entra desde la izquierda con opacidad cero, y se va hacia la derecha nuevamente con opacidad cero. Entonces, nuestras nubes no están cambiando de dirección ni nada, están utilizando diferentes posiciones de inicio y fin. Y finalmente, tenemos nuestras transiciones de estado. Entonces, aquí, todo lo que te mostraré está en el código. Tenemos un valor de tiempo, que es una referencia, que tiene un valor predeterminado de 18, es decir, las 6 p.m. Y esto se pasa a varios componentes. Por ejemplo, este es el componente de la luna. Nuestro componente de la luna aquí a la derecha, se le asigna una propiedad de tiempo y luego cambiamos la opacidad de la luna dependiendo de la hora. Por ejemplo, ahora no hay luna porque es de día. Entonces, tenemos este número y cuando lo cambiamos, muchos elementos diferentes cambiarán de estado. Por ejemplo, algunos de ellos cambian de color, algunos cambian de opacidad, algunos cambian de posición, como el sol y la opacidad como la luna. Entonces, eso no es una animación. Eso es una animación porque simplemente arrastré el controlador lentamente, pero eso no es realmente una animación. La animación aquí es que estamos utilizando GSAP nuevamente para que cuando hacemos clic en un botón, se anime suavemente ese número. Entonces, ahora mismo, el número es 18. Hago clic en este botón, se animará a 12 y podemos ver el efecto en nuestra animación. Genial. Esa es la síntesis de todos los tipos de animación en un SVG. Hemos visto transiciones sin un grupo, como el barco que entra y sale, hemos visto grupos de transición, las nubes y luego hemos visto transiciones de estado. Y eso es todo de mi charla. Gracias por escuchar.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Vue.js London Live 2021Vue.js London Live 2021
34 min
Everything Beyond State Management in Stores with Pinia
Top Content
When we think about Vuex, Pinia, or stores in general we often think about state management and the Flux patterns but not only do stores not always follow the Flux pattern, there is so much more about stores that make them worth using! Plugins, Devtools, server-side rendering, TypeScript integrations... Let's dive into everything beyond state management with Pinia with practical examples about plugins and Devtools to get the most out of your stores.
Vue.js London Live 2021Vue.js London Live 2021
20 min
One Year Into Vue 3
Top Content
Vue 3 may still sound new to many users, but it's actually been released for over a year already. How did Vue 3 evolve during this period? Why did it take so long for the ecosystem to catch up? What did we learn from this process? What's coming next? We will discuss these questions in this talk!
Vue.js London Live 2021Vue.js London Live 2021
8 min
Utilising Rust from Vue with WebAssembly
Top Content
Rust is a new language for writing high-performance code, that can be compiled to WebAssembly, and run within the browser. In this talk you will be taken through how you can integrate Rust, within a Vue application, in a way that's painless and easy. With examples on how to interact with Rust from JavaScript, and some of the gotchas to be aware of.
Vue.js London Live 2021Vue.js London Live 2021
24 min
Local State and Server Cache: Finding a Balance
Top Content
How many times did you implement the same flow in your application: check, if data is already fetched from the server, if yes - render the data, if not - fetch this data and then render it? I think I've done it more than ten times myself and I've seen the question about this flow more than fifty times. Unfortunately, our go-to state management library, Vuex, doesn't provide any solution for this.For GraphQL-based application, there was an alternative to use Apollo client that provided tools for working with the cache. But what if you use REST? Luckily, now we have a Vue alternative to a react-query library that provides a nice solution for working with server cache. In this talk, I will explain the distinction between local application state and local server cache and do some live coding to show how to work with the latter.

Workshops on related topic

Vue.js London Live 2021Vue.js London Live 2021
169 min
Vue3: Modern Frontend App Development
Top Content
Featured WorkshopFree
The Vue3 has been released in mid-2020. Besides many improvements and optimizations, the main feature of Vue3 brings is the Composition API – a new way to write and reuse reactive code. Let's learn more about how to use Composition API efficiently.

Besides core Vue3 features we'll explain examples of how to use popular libraries with Vue3.

Table of contents:
- Introduction to Vue3
- Composition API
- Core libraries
- Vue3 ecosystem

Prerequisites:
IDE of choice (Inellij or VSC) installed
Nodejs + NPM
JS GameDev Summit 2022JS GameDev Summit 2022
165 min
How to make amazing generative art with simple JavaScript code
Top Content
WorkshopFree
Instead of manually drawing each image like traditional art, generative artists write programs that are capable of producing a variety of results. In this workshop you will learn how to create incredible generative art using only a web browser and text editor. Starting with basic concepts and building towards advanced theory, we will cover everything you need to know.
Vue.js London Live 2021Vue.js London Live 2021
117 min
Using Nitro – Building an App with the Latest Nuxt Rendering Engine
Top Content
Workshop
We'll build a Nuxt project together from scratch using Nitro, the new Nuxt rendering engine, and Nuxt Bridge. We'll explore some of the ways that you can use and deploy Nitro, whilst building a application together with some of the real-world constraints you'd face when deploying an app for your enterprise. Along the way, fire your questions at me and I'll do my best to answer them.
JSNation 2022JSNation 2022
141 min
Going on an adventure with Nuxt 3, Motion UI and Azure
WorkshopFree
We love easily created and deployed web applications! So, let’s see what a very current tech stack like Nuxt 3, Motion UI and Azure Static Web Apps can do for us. It could very well be a golden trio in modern day web development. Or it could be a fire pit of bugs and errors. Either way it will be a learning adventure for us all. Nuxt 3 has been released just a few months ago, and we cannot wait any longer to explore its new features like its acceptance of Vue 3 and the Nitro Engine. We add a bit of pizzazz to our application with the Sass library Motion UI, because static design is out, and animations are in again.Our driving power of the stack will be Azure. Azure static web apps are new, close to production and a nifty and quick way for developers to deploy their websites. So of course, we must try this out.With some sprinkled Azure Functions on top, we will explore what web development in 2022 can do.
Vue.js London 2023Vue.js London 2023
137 min
TresJS create 3D experiences declaratively with Vue Components
Workshop
- Intro 3D - Intro WebGL- ThreeJS- Why TresJS- Installation or Stackblitz setup - Core Basics- Setting up the Canvas- Scene- Camera- Adding an object- Geometries- Arguments- Props- Slots- The Loop- UseRenderLoop composable- Before and After rendering callbacks- Basic Animations- Materials- Basic Material- Normal Material- Toon Material- Lambert Material- Standard and Physical Material- Metalness, roughness - Lights- AmbientLight- DirectionalLight- PointLights- Shadows- Textures- Loading textures with useTextures- Tips and tricks- Misc- Orbit Controls- Loading models with Cientos- Debugging your scene- Performance
Vue.js London Live 2021Vue.js London Live 2021
176 min
Building Vue forms with VeeValidate
Workshop
In this workshop, you will learn how to use vee-validate to handle form validation, manage form values and handle submissions effectively. We will start from the basics with a simple login form all the way to using the composition API and building repeatable and multistep forms.

Table of contents:
- Introduction to vee-validate
- Building a basic form with vee-validate components
- Handling validation and form submissions
- Building validatable input components with the composition API
- Field Arrays and repeatable inputs
- Building a multistep form
Prerequisites:
VSCode setup and an empty Vite + Vue project.