Animation math
You can add, subtract and multiply animation values to create more complex animations.
Consider the following example:
import { spring , useCurrentFrame , useVideoConfig } from "remotion";
const frame = useCurrentFrame ();
const { fps , durationInFrames } = useVideoConfig ();
const enter = spring ({
fps ,
frame ,
config : {
damping : 200,
},
});
const exit = spring ({
fps ,
config : {
damping : 200,
},
durationInFrames : 20,
delay : durationInFrames - 20,
frame ,
});
const scale = enter - exit ;- At the beginning of the animation, the value of
enteris0, it goes to1over the course of the animation. - Before the sequence ends, we create an
exitanimation that goes from0to1. - Subtracting the
exitanimation from theenteranimation gives us the overall state of the animation which we use to animatescale.
import React from "react";
import {
AbsoluteFill ,
spring ,
useCurrentFrame ,
useVideoConfig ,
} from "remotion";
export const AnimationMath : React .FC = () => {
const frame = useCurrentFrame ();
const { fps , durationInFrames } = useVideoConfig ();
const enter = spring ({
fps ,
frame ,
config : {
damping : 200,
},
});
const exit = spring ({
fps ,
config : {
damping : 200,
},
durationInFrames : 20,
delay : durationInFrames - 20,
frame ,
});
const scale = enter - exit ;
return (
<AbsoluteFill
style ={{
justifyContent : "center",
alignItems : "center",
backgroundColor : "white",
}}
>
<div
style ={{
height : 100,
width : 100,
backgroundColor : "#4290f5",
borderRadius : 20,
transform : `scale(${scale })`,
justifyContent : "center",
alignItems : "center",
display : "flex",
fontSize : 50,
color : "white",
}}
>
{frame }
</div >
</AbsoluteFill >
);
};