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
}
}