Documentation
Animations, images clés et transitions
Modèle d'animation actuel, comportement des images clés, règles de timing et transitions
Animations, images clés et transitions
1. Modèle d'ordonnancement
Cycle de vie d'un clip de niveau supérieur :
- Attendre jusqu'à
start - Insérer le nœud dans la scène
- Exécuter animations, images clés et transitions pendant la fenêtre active du clip
- Terminer le cycle de vie du clip
Comportement parallèle :
animationsetkeyframespeuvent s'exécuter en parallèle- La
transitionvisuelle peut également s'exécuter en parallèle pour les clips nonaudio - Les clips
audioexécutent une automation audio au lieu de transitions visuelles
2. Animation
interface Animation {
type: AnimationType;
duration: number;
delay?: number;
easing?: EasingFunction;
loop?: boolean | number;
from?: any;
to?: any;
direction?: "left" | "right" | "up" | "down";
distance?: number;
}
Types d'animation actuellement pris en charge :
fadeInfadeOutmovescalerotateslideInslideOutzoomInzoomOut
3. Comportement des champs
duration
- Unité : secondes
- Requis
- Si
loopest activé, un cycle de boucle utilise toujours cette valeur comme durée de base
delay
- Unité : secondes
- Optionnel
- Les animations avec le même délai démarrent ensemble
- Les animations avec des délais différents s'exécutent à leur propre moment planifié
easing
- Optionnel
- Vaut
linearpar défaut lorsqu'il est omis
loop
- Type :
boolean | number true: répéter autant de fois que possible dans la durée restante du clip- Nombre : répéter ce nombre de cycles
- Si le temps total de boucle dépasse la fenêtre du clip, il est tronqué automatiquement
from
Actuellement pertinent pour :
scalerotatemove
Notes :
move.fromdoit être{ x, y }scale.frompeut être un nombre ou une valeur 2Drotate.fromdoit être un nombre
to
Actuellement pertinent pour :
scalerotatemove
Notes :
move.todoit être{ x, y }
direction
Actuellement utilisée par :
slideInslideOut
Certains templates intégrés transmettent également direction à leurs animations générées.
distance
Actuellement utilisée par :
slideInslideOut
Valeur par défaut :
- Généralement
200lorsqu'elle est omise
4. Comportement par type d'animation
fadeIn
- Commence avec une opacité
0 - Anime jusqu'à l'opacité d'origine
fadeOut
- Anime de l'opacité actuelle vers
0
zoomIn
- Commence avec une échelle
[0, 0] - Anime jusqu'à l'échelle d'origine
zoomOut
- Anime de l'échelle actuelle vers
[0, 0]
slideIn
- Commence avec un décalage défini par
direction + distance - Fait aussi apparaître progressivement depuis une opacité
0
slideOut
- Se termine en sortant selon
direction + distance - Fait aussi disparaître progressivement jusqu'à une opacité
0
scale
- Si
fromexiste, l'échelle est d'abord définie surfrom - Ensuite elle anime vers
to - Si
toest absent, elle revient à l'échelle d'origine
rotate
- Si
fromexiste, la rotation est d'abord définie - Ensuite elle anime vers
to - Si
toest absent, elle tourne généralement jusqu'à360
move
fromettodoivent tous deux être des objets- Exemple :
{
"type": "move",
"duration": 1,
"from": { "x": -200, "y": 0 },
"to": { "x": 0, "y": 0 }
}
5. keyframes
interface Keyframe {
property: string;
frames: KeyframeFrame[];
}
interface KeyframeFrame {
time: number;
value: any;
easing?: EasingFunction;
}
Propriétés actuellement confirmées comme prises en charge :
xypositionopacityscalerotationwidthheightfillstroke
Comportement :
framessont triées partime- La première frame définit directement la valeur initiale
- Les frames suivantes interpolent entre les points de contrôle
- Après la dernière image clé, le clip attend jusqu'à sa propre fin
6. Transition
interface Transition {
type: "fade" | "slide" | "zoom" | "wipe";
duration: number;
direction?: "left" | "right" | "up" | "down";
easing?: EasingFunction;
}
Actuellement pris en charge :
fadeslidezoomwipe
Comportement à l'exécution :
- Chaque transition possède une phase d'intro et une phase d'outro
- Les deux phases utilisent
transition.duration - Si le temps combiné des transitions dépasse la durée du clip, le runtime le tronque automatiquement
7. Comportement par type de transition
fade
- Intro : opacité
0 -> opacité d'origine - Outro : opacité d'origine
-> 0
slide
- Intro : glisse depuis l'extérieur du canvas
- Outro : glisse vers la direction choisie
- L'opacité change en même temps
zoom
- Intro : zoom avant et fondu entrant
- Outro : zoom arrière et fondu sortant
wipe
- Approximativement implémenté via une mise à l'échelle des axes
- Les directions gauche et droite compressent l'axe horizontal
- Les directions haut et bas compressent l'axe vertical
8. Liste des fonctions d'assouplissement
Actuellement pris en charge :
lineareaseInSineeaseOutSineeaseInOutSineeaseInQuadeaseOutQuadeaseInOutQuadeaseInCubiceaseOutCubiceaseInOutCubiceaseInQuarteaseOutQuarteaseInOutQuarteaseInBackeaseOutBackeaseInOutBackeaseInElasticeaseOutElasticeaseInOutElasticeaseInBounceeaseOutBounceeaseInOutBounce
9. Contrôle du timing audio
En plus de start et duration, les clips audio prennent aussi en charge :
source.startsource.endfadeInfadeOut
Ensemble, ces champs contrôlent :
- quand la lecture commence
- quel segment du média source est utilisé
- comment le volume évolue dans le temps
10. Exemple : intro du titre, maintien et sortie
{
"type": "text",
"start": 0,
"duration": 4,
"text": "Hello",
"transform": {
"x": "50%",
"y": "50%"
},
"style": {
"fontSize": 72,
"fill": "#ffffff"
},
"animations": [
{
"type": "slideIn",
"direction": "up",
"distance": 120,
"duration": 0.6,
"easing": "easeOutCubic"
},
{
"type": "fadeOut",
"delay": 3.2,
"duration": 0.6,
"easing": "easeInSine"
}
],
"transition": {
"type": "fade",
"duration": 0.25
}
}