Remotion Animated
*Una forma encantadora de animar objetos en Remotion.
Animaciones
Las animaciones ocurren al transformar las propiedades de un elemento a lo largo del tiempo. Por ejemplo, si queremos desvanecer un texto, debemos cambiar gradualmente la opacidad con el tiempo para que pase de 0 a 1.
Las animaciones en Remotion se basan en el valor devuelto por useCurrentFrame().
const frame = useCurrentFrame();
const opacity = Math.min(1, frame / 60);
return (
<AbsoluteFill
style={{
justifyContent: "center",
alignItems: "center",
backgroundColor: "white",
fontSize: 80,
}}
>
<div style={{ opacity: opacity }}>Hello World!</div>
</AbsoluteFill>
);
En Remotion NO se recomienda usar animaciones CSS para evitar problemas de parpadeo. Esto significa que NO debemos usar la definicón @keyframes
o la propiedad animation
(y todas sus subpropiedades). Igualmente tampoco podemos usar eventos de animación Javascript (event listeners).
Transformar style={{...}}
Las cinco transformaciones CSS más comunes son:
opacity: 0.5, // Opacidad
transform: `scale(0.5)`, // Escala
transform: `skew(20deg)`, // Inclinación, usando rad(radianes) y deg(grados)
transform: `translateX(100px)`, // Trasladar en el eje X, Y o incluso Z
transform: `rotate(45deg)`, // Rotación (por default es alrededor del eje Z), pero también alrededor de los ejes X e Y (ejm: rotateZ(45deg)) y se pueden usar rad(radianes) o deg(grados).
A menudo se combinan varias transformaciones, simplemente especifique varias transformaciones separadas por un espacio.
transform: `translateX(100px) scale(2)`
Si no desea rotar alrededor del centro, puede usar la propiedad transform-origin
para cambiar el origen de la rotación.
transformBox: 'fill-box', transformOrigin: 'center center'
Más formas de transformar objetos
height
ywidth
de un<div>
,border-radius
,box-shadow
,linear-gradient
,- Color usando
coloryinterpolateColors()
, - Ruta SVG usando
evolvePath()
, - El tamaño e inclinación de una fuente,
- Valores CSS
filter()
,
Interpolar
El uso de la función interpolate() puede hacer que las animaciones sean más legibles. La animación anterior también se puede escribir como:
import { interpolate } from "remotion";
const frame = useCurrentFrame();
const opacity = interpolate(frame, [0, 60], [0, 1], {
extrapolateRight: "clamp", // Utilizamos la configuración extrapolateRight para limitar la salida de modo que nunca sea mayor que 1.
});
- Donde frame es la variable a interpolar,
- [0, 60] es el rango de entrada,
- y [0, 1] el rango de salida.
Remotion ofrece varias funciones especiales para transformar el movimiento lineal:
interpolate
permite convertir funciones lineales en cuadráticas/cúbicas, o movimiento mediante una curva Bézier,spring
anima el movimiento usandospring physics
,interpolateColors
:interpolate
yspring
se ocupan de las propiedades CSS que tienen un tipo numérico; para cambiar el color se usainterpolateColors
.
interpolate
Spring
La configuración predeterminada de spring
produce un pequeño exceso (resorte), lo que significa que la animación rebotará un poco.
evolvePath
Anima una ruta SVG para que pase de ser invisible a su longitud completa. La función toma dos argumentos: 0 invisible y 1 completamente dibujado.
interpolateColors
Movimiento circular
const frame = useCurrentFrame()
const x = Math.sin(frame / 10) // Movimiento hotizontal (-1 a 1)
const y = Math.cos(frame / 10) // Movimiento vertical (-1 a 1)
// Combinando x & y obtenemos un movimiento circular
Sumar y restar animaciones.
Se pueden utilizar los operadores estándar de JavaScript para sumar, restar, multiplicar y dividir los valores de animación entre sí y crear animaciones más complejas.
const left =
interpolate(scalePush1, [0, 1], [0, 80]) +
interpolate(scalePush2, [0, 1], [0, 80]) +
interpolate(scalePush3, [0, 1], [0, 80]);