动画数学
您可以添加、减去和相乘动画值,以创建更复杂的动画。
考虑以下示例:
进入和退出tsx
import {spring ,useCurrentFrame ,useVideoConfig } from "remotion";constframe =useCurrentFrame ();const {fps ,durationInFrames } =useVideoConfig ();constenter =spring ({fps ,frame ,config : {damping : 200,},});constexit =spring ({fps ,config : {damping : 200,},durationInFrames : 20,delay :durationInFrames - 20,frame ,});constscale =enter -exit ;
进入和退出tsx
import {spring ,useCurrentFrame ,useVideoConfig } from "remotion";constframe =useCurrentFrame ();const {fps ,durationInFrames } =useVideoConfig ();constenter =spring ({fps ,frame ,config : {damping : 200,},});constexit =spring ({fps ,config : {damping : 200,},durationInFrames : 20,delay :durationInFrames - 20,frame ,});constscale =enter -exit ;
- 在动画开始时,
enter
的值为0
,在动画过程中逐渐增加到1
。 - 在序列结束之前,我们创建一个
exit
动画,从0
增加到1
。 - 将
exit
动画减去enter
动画,得到动画的整体状态,我们用它来动画scale
。
完整代码段tsx
importReact from "react";import {AbsoluteFill ,spring ,useCurrentFrame ,useVideoConfig ,} from "remotion";export constAnimationMath :React .FC = () => {constframe =useCurrentFrame ();const {fps ,durationInFrames } =useVideoConfig ();constenter =spring ({fps ,frame ,config : {damping : 200,},});constexit =spring ({fps ,config : {damping : 200,},durationInFrames : 20,delay :durationInFrames - 20,frame ,});constscale =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 >);};
完整代码段tsx
importReact from "react";import {AbsoluteFill ,spring ,useCurrentFrame ,useVideoConfig ,} from "remotion";export constAnimationMath :React .FC = () => {constframe =useCurrentFrame ();const {fps ,durationInFrames } =useVideoConfig ();constenter =spring ({fps ,frame ,config : {damping : 200,},});constexit =spring ({fps ,config : {damping : 200,},durationInFrames : 20,delay :durationInFrames - 20,frame ,});constscale =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 >);};