Animaciones con JS

Rate this content
Bookmark

Creando diferentes efectos de animación como rebotes, escritura con javascript puro. Observando varios enfoques para crear animaciones con funciones basadas en el tiempo y Request Animation Frame.

This talk has been presented at JSNation 2022, check out the latest edition of this JavaScript Conference.

FAQ

Una animación es simplemente una forma de comunicar movimiento. Consiste en mostrar imágenes de manera suficientemente rápida para que el cerebro perciba un movimiento continuo en lugar de fotogramas individuales.

Para lograr animaciones suaves en la web, se apunta a una tasa de 60 fotogramas por segundo. Sin embargo, esta tasa puede variar dependiendo del dispositivo utilizado.

Las transiciones CSS definen un punto de inicio y un punto final, activadas por una acción como un hover o un click y no pueden ejecutarse en bucle. Las animaciones CSS, en cambio, permiten definir puntos intermedios usando keyframes y pueden ejecutarse en bucle.

JavaScript permite un control más detallado sobre las animaciones, como controlar la interpolación y simular escenarios del mundo real, lo cual no es siempre posible con CSS debido a sus limitaciones en la definición dinámica de propiedades de animación.

El requestAnimationFrame es una función que optimiza las animaciones para que corran de manera fluida y sincronizada con la frecuencia de actualización del dispositivo. Reduce el consumo de CPU y batería al no ejecutar animaciones cuando la pestaña está inactiva y ajusta la tasa de fotogramas según el dispositivo.

Para lograr consistencia en diferentes dispositivos, se puede ajustar la posición de la animación basada en el tiempo transcurrido en lugar de incrementos fijos. Esto permite que la animación se ejecute de manera uniforme independientemente de la tasa de fotogramas del dispositivo.

La API de Animaciones Web es una herramienta que permite definir animaciones de manera similar a CSS pero con la capacidad de ajustar dinámicamente propiedades como duraciones y distancias. Su ventaja principal es que no se ejecuta en el hilo principal, lo que permite animaciones más eficientes.

Las animaciones CSS son preferibles cuando la animación es simple y no se requiere un control detallado. Son más eficientes y menos demandantes en términos de rendimiento comparadas con JavaScript.

Aashima Ahuja
Aashima Ahuja
19 min
16 Jun, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy trata sobre animaciones en Javascript, abarcando las tasas de fotogramas y diferentes métodos como transiciones y animaciones CSS. JavaScript proporciona un mayor control sobre las animaciones, permitiendo la interpolación y simulación de escenarios del mundo real. Se discuten diferentes enfoques para animar una caja de cero a 100 píxeles, incluyendo bucles for, temporizadores y la API de animaciones web. Se destaca Request Animation Frame como una solución para animaciones consistentes y suaves. La API de Animaciones Web se presenta como una herramienta poderosa junto con las animaciones y transiciones CSS, aunque tiene un soporte limitado en los navegadores.
Available in English: Animations with JS

1. Introducción a las animaciones en Javascript

Short description:

La charla de hoy trata sobre las animaciones en Javascript. Discutiremos las tasas de fotogramas y cómo afectan la suavidad de la animación. Se pueden utilizar diferentes métodos como las transiciones y animaciones CSS para lograr animaciones web.

¿Cómo les va hasta ahora? ¿Están disfrutando de la charla? Genial. ¿Hay desarrolladores de backend aquí? ¿Haciendo ruido? ¿Alguno diseñador de movimiento? Ok, nadie.

Hoy mi tema es animations. Animations en palabras simples es simplemente una forma de comunicar movimiento. Si bien este concepto se introdujo primero en las películas antes de ser llevado al web, pero las personas han estado tratando de encontrar formas de comunicar movimiento desde hace mucho tiempo. ¿Cuántos de ustedes recuerdan este libro de dibujos animados, donde dibujábamos un montón de dibujos y los pasábamos rápidamente para crear una percepción de movimiento?

La idea es que cuando las imágenes se muestran lo suficientemente rápido, nuestro cerebro pierde la capacidad de ver los fotogramas individuales y los mezcla en una sola imagen en movimiento. Pero en el mundo digital, tenemos fotogramas. Cada fotograma tiene un dibujo y la idea es similar al libro de dibujos animados, simplemente se colocan esos fotogramas juntos muy rápido para crear la percepción de movimiento.

Hola, mi nombre es Ashima. Soy una amiga e ingeniera en Miro, y hoy voy a hablar especialmente sobre animations en Javascript. Todos ustedes deben haber escuchado este término, tasas de fotogramas, fotogramas por segundo. Lo escuché por primera vez en las películas. La tasa de fotogramas es el número de fotogramas mostrados en un segundo. Entonces, si mostramos 60 fotogramas en un segundo, se convierte en 60 fotogramas por segundo, y cuanto más fotogramas mostremos en un segundo, más suave será la animación. Para renderizar animaciones suaves en la web, apuntamos a 60 fotogramas por segundo. Pero eso depende mucho del dispositivo que estés usando. Por ejemplo, si estás usando un teléfono móvil, es muy probable que funcione a una frecuencia inferior a 60 hercios. Entonces, la tasa de fotogramas sería de 30 fotogramas por segundo o la que admita el dispositivo.

En la web, podemos lograr animations usando JavaScript, usando CSS, usando transiciones y animaciones CSS. En las transiciones CSS, generalmente defines dos puntos. Uno es el punto de inicio y el otro es el punto final. Lo que sucede en el medio es controlado por el navegador. Esto es lo que llamamos interpolación. En las transiciones CSS, generalmente necesitas una acción para activarlas. Por ejemplo, puedes usar un hover o un click. Y no puedes ejecutarlas en bucle. Entonces tenemos las CSS animations. Y en las CSS animations, también puedes definir puntos intermedios utilizando keyframes, además de definir el punto de inicio y el punto final. Y sí, la interpolación, nuevamente, es controlada por el navegador.

2. Controlling Animations in JavaScript

Short description:

A veces CSS no es suficiente para lograr las animaciones deseadas en JavaScript. JavaScript proporciona un mayor control sobre las animaciones, permitiendo la interpolación y simulación de escenarios del mundo real. Existen diferentes enfoques para animar una caja de cero a 100 píxeles, incluyendo el uso de un bucle for, temporizadores como setInterval y setTimeout, el requestAnimationFrame y la moderna API de animaciones web. Al utilizar un bucle for, el navegador renderiza la caja directamente en 100 píxeles en lugar de actualizar incrementalmente su posición debido a cómo funciona el bucle de eventos. Los temporizadores como setInterval y setTimeout se pueden utilizar para resolver este problema ejecutando una devolución de llamada después de un retraso especificado.

Así es como se movería entre diferentes estados. Pero a veces no es posible hacer todo con CSS. Sé que el navegador hace mucho por nosotros cuando se trata de animaciones. Pero cuando necesitamos más control sobre las animaciones, necesitamos usar JavaScript. Y así, JavaScript te permite controlar la interpolación y simular escenarios del mundo real.

Por ejemplo, la caída libre de un objeto o la caída de nieve. Supongamos que se te presenta este problema, que quieres animar una caja de cero a 100 píxeles. ¿Cuántos de ustedes han encontrado esto en sus entrevistas? Yo sí. Y fracasé. Pero hoy veremos que hay un par de enfoques para resolver esto, básicamente. Puedes usar un bucle for si eres nuevo en JavaScript. También puedes usar temporizadores, setInterval, setTimeout. También puedes usar el requestAnimationFrame y luego la moderna API de animaciones web.

Si estás usando un bucle for, puedes ejecutarlo desde cero hasta 100 píxeles y decirle a tu navegador: `ok, navegador, muéstrame esto en una posición específica`. Pero esto no funciona. Lo que sucede en este caso es que la caja se renderiza directamente en 100 píxeles. Pero eso no es lo que quieres. Quieres actualizar la posición incrementalmente. La expectativa es que el navegador haga algo como esto, mostrarlo en 0, 1, 2 y luego en 100. Pero la realidad es que la línea se ejecuta como translateX 100 píxeles. Maldito navegador. Esto se debe a cómo funciona el bucle de eventos. Me gusta mucho este diagrama de Jake. Si no has visto la charla sobre el bucle de eventos, realmente debes verla. Lo que sucede aquí es que el bucle for se ejecuta como una tarea. Y después de que se ejecuta todo el bucle for, el navegador calcula los estilos, renderiza el diseño y luego realiza la pintura. Y por eso vemos que solo se ejecuta translateX 100 píxeles.

Otra forma de resolver este problema es utilizando temporizadores. Puedes usar setInterval y setTimeout. Ambas funciones toman una devolución de llamada y un tiempo de retraso después del cual se ejecutará la devolución de llamada.

QnA

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

El Potencial Caprichoso de los Marcos de Trabajo de JavaScript
React Summit US 2023React Summit US 2023
28 min
El Potencial Caprichoso de los Marcos de Trabajo de JavaScript
Top Content
The speaker discusses the whimsical and detailed work of Stripe, particularly their interactive and dynamic pages. They explain the use of React for building whimsical details and tracking mouse position. The speaker introduces React Spring for smooth animation and React3 Fiber for creating a 3D egg model. They also mention the use of Framer Motion and React server components for animating CSS properties.
Animaciones Emocionales y Funcionales de la Interfaz de Usuario en React
React Day Berlin 2022React Day Berlin 2022
28 min
Animaciones Emocionales y Funcionales de la Interfaz de Usuario en React
Today's Talk discussed the importance of UI animations in React, both functional and emotional. Examples were given using CSS and Framer Motion, with a focus on user feedback and accessibility. Design guidelines and animation usage were highlighted, as well as the consideration of negative emotions in animations. The Talk also touched on designing 404 error pages and concluded with gratitude to the audience and organizers.
Las animaciones en React Native deben ser divertidas
React Advanced 2022React Advanced 2022
28 min
Las animaciones en React Native deben ser divertidas
This talk is about animations in React Native, specifically focusing on React Native Reanimated. It covers the use of interpolations and extrapolations in animations, animating items in a carousel or list, sticky elements and interpolation, and fluidity and layout animations. The talk provides valuable tips and tricks for creating performant animations and explores the use of math formulas for natural movements.
Sigue Desplazándote
JSNation Live 2021JSNation Live 2021
33 min
Sigue Desplazándote
Scroll animations can enhance user experience when done properly, but should not distract from important information. CSS, JavaScript, and plugins like Scroll Trigger can be used to achieve scroll animations. GreenSock's ScrollTrigger provides a powerful JavaScript animation library for more complex animations. It is important to consider accessibility and provide reduced motion fallbacks. CodePen and GreenSock's documentation are valuable resources for learning and inspiration in creative coding.
Animación y Vue.js
Vue.js London Live 2021Vue.js London Live 2021
32 min
Animación y Vue.js
Today's Talk covers animation in Vue JS apps, including CSS animations, JavaScript animations using the GSAP library, and handling multiple elements with transition groups. The Talk also discusses different kinds of movements, state transitions, and animating numbers and SVGs. Overall, it provides a comprehensive overview of animation techniques and tools for enhancing Vue JS apps.
Lecciones aprendidas de la construcción de aplicaciones interactivas en React
React Summit Remote Edition 2021React Summit Remote Edition 2021
35 min
Lecciones aprendidas de la construcción de aplicaciones interactivas en React
Animations can enhance the user experience and provide context in interface design. Using frame and motion in React can create smooth fade-in effects and improve navigation. Optimistic updates and instant comment appearance can eliminate waiting time and improve user experience. Motion can be used in multiple ways to give context and enhance user experience. Accessibility and performance should be considered when implementing animations. Choosing the right library, such as frame of motion or React Spring, can simplify animation implementation. Animations can enhance perceived performance and influence users' perception of speed.

Workshops on related topic

Cómo crear arte generativo increíble con código JavaScript simple
JS GameDev Summit 2022JS GameDev Summit 2022
165 min
Cómo crear arte generativo increíble con código JavaScript simple
Top Content
WorkshopFree
Frank Force
Frank Force
En lugar de dibujar manualmente cada imagen como en el arte tradicional, los artistas generativos escriben programas que son capaces de producir una variedad de resultados. En esta masterclass aprenderás cómo crear arte generativo increíble usando solo un navegador web y un editor de texto. Comenzando con conceptos básicos y avanzando hacia la teoría avanzada, cubriremos todo lo que necesitas saber.