transition-sequences
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTransition Sequence Animations
过渡序列动画
Apply Disney's 12 principles to choreographed multi-step motion.
将迪士尼12条动画原则应用于编排好的多步骤动效中。
Principle Application
原则应用
Squash & Stretch: Each element in sequence can compress/expand independently for organic feel.
Anticipation: Sequence starts with a setup phase. Brief pause or gather before motion begins.
Staging: Direct attention through the sequence. Most important element animates first or last.
Straight Ahead vs Pose-to-Pose: Plan keyframes for each step. Map the entire sequence before implementing.
Follow Through & Overlapping: Elements don't move in unison. Stagger starts by 50-100ms. Let motion cascade.
Slow In/Slow Out: Each step eases. The sequence overall should ease too - faster middle, slower ends.
Arcs: Transitions across space follow arcs. Page sliding left curves slightly, not linear slide.
Secondary Action: Primary transition + secondary details. Page slides while elements within fade/scale.
Timing:
- Step overlap: 30-50% of previous step's duration
- Total sequence: 300-800ms for UI, up to 1500ms for dramatic
- Gap between steps: 0-100ms (overlap preferred)
Exaggeration: Sequence itself is exaggeration. Individual steps stay subtle.
Solid Drawing: Maintain spatial consistency. If A goes left, B should come from left.
Appeal: Sequences tell a story. Beginning, middle, end - satisfying resolution.
挤压与拉伸:序列中的每个元素可独立压缩/扩展,营造自然的视觉感受。
预备动作:序列以准备阶段开启。动效开始前加入短暂停顿或蓄力动作。
舞台呈现:通过序列引导用户注意力。最重要的元素优先或最后进行动画。
逐帧动画与关键帧动画:为每个步骤规划关键帧。在实现前先梳理完整的序列流程。
跟随动作与重叠动作:不同元素不同步运动。将启动时间错开50-100毫秒,让动效呈级联式展开。
缓入缓出:每个步骤都加入缓动效果。整个序列也需缓动——中间阶段速度快,首尾阶段速度慢。
弧线运动:空间过渡遵循弧线轨迹。页面向左滑动时带有轻微曲线,而非直线滑动。
次要动作:主过渡动效搭配次要细节。页面滑动的同时,内部元素进行淡入/缩放。
时间控制:
- 步骤重叠:占上一步时长的30-50%
- 总序列时长:UI场景为300-800毫秒,戏剧性场景最长可达1500毫秒
- 步骤间隔:0-100毫秒(优先选择重叠方式)
夸张表现:序列整体可适当夸张,但单个步骤需保持简洁克制。
立体造型:保持空间一致性。如果元素A向左移动,元素B也应从左侧出现。
吸引力:序列需讲述完整故事。有开头、发展和结尾,带来满足感强的收尾。
Timing Recommendations
时间控制建议
| Sequence Type | Total Duration | Step Count | Step Overlap |
|---|---|---|---|
| Tab Change | 300ms | 2 | 50% |
| Page Transition | 500-600ms | 2-3 | 30% |
| Modal Open | 400ms | 3 | 40% |
| Wizard Step | 400ms | 2 | 50% |
| Onboarding | 800-1200ms | 4-6 | 30% |
| Dramatic Reveal | 1000-1500ms | 5-8 | 40% |
| 序列类型 | 总时长 | 步骤数量 | 步骤重叠比例 |
|---|---|---|---|
| 标签切换 | 300ms | 2 | 50% |
| 页面过渡 | 500-600ms | 2-3 | 30% |
| 模态框打开 | 400ms | 3 | 40% |
| 向导步骤 | 400ms | 2 | 50% |
| 引导流程 | 800-1200ms | 4-6 | 30% |
| 戏剧性展示 | 1000-1500ms | 5-8 | 40% |
Implementation Patterns
实现模式
css
/* Staggered sequence */
.sequence-item {
opacity: 0;
transform: translateY(20px);
animation: reveal 400ms ease-out forwards;
}
.sequence-item:nth-child(1) { animation-delay: 0ms; }
.sequence-item:nth-child(2) { animation-delay: 80ms; }
.sequence-item:nth-child(3) { animation-delay: 160ms; }
.sequence-item:nth-child(4) { animation-delay: 240ms; }
@keyframes reveal {
to {
opacity: 1;
transform: translateY(0);
}
}
/* Page transition choreography */
.page-exit {
animation: page-out 250ms ease-in forwards;
}
.page-enter {
animation: page-in 300ms ease-out 200ms forwards;
}
@keyframes page-out {
to { opacity: 0; transform: translateX(-30px); }
}
@keyframes page-in {
from { opacity: 0; transform: translateX(30px); }
to { opacity: 1; transform: translateX(0); }
}css
/* Staggered sequence */
.sequence-item {
opacity: 0;
transform: translateY(20px);
animation: reveal 400ms ease-out forwards;
}
.sequence-item:nth-child(1) { animation-delay: 0ms; }
.sequence-item:nth-child(2) { animation-delay: 80ms; }
.sequence-item:nth-child(3) { animation-delay: 160ms; }
.sequence-item:nth-child(4) { animation-delay: 240ms; }
@keyframes reveal {
to {
opacity: 1;
transform: translateY(0);
}
}
/* Page transition choreography */
.page-exit {
animation: page-out 250ms ease-in forwards;
}
.page-enter {
animation: page-in 300ms ease-out 200ms forwards;
}
@keyframes page-out {
to { opacity: 0; transform: translateX(-30px); }
}
@keyframes page-in {
from { opacity: 0; transform: translateX(30px); }
to { opacity: 1; transform: translateX(0); }
}Sequence Orchestration Formula
序列编排公式
javascript
// Calculate stagger delays
const items = document.querySelectorAll('.sequence-item');
const totalDuration = 600; // ms
const overlap = 0.4; // 40% overlap
items.forEach((item, index) => {
const stepDuration = totalDuration / items.length;
const delay = index * stepDuration * (1 - overlap);
item.style.animationDelay = `${delay}ms`;
});javascript
// Calculate stagger delays
const items = document.querySelectorAll('.sequence-item');
const totalDuration = 600; // ms
const overlap = 0.4; // 40% overlap
items.forEach((item, index) => {
const stepDuration = totalDuration / items.length;
const delay = index * stepDuration * (1 - overlap);
item.style.animationDelay = `${delay}ms`;
});Key Rules
核心规则
- Overlap steps 30-50% - no gaps, no simultaneous starts
- Total sequence under 800ms for functional UI
- Test at 0.5x speed to verify choreography
- Provide skip option for sequences over 500ms
- : instant state change, no sequence
prefers-reduced-motion
- 步骤重叠30-50%——无间隔,也不同时启动
- 功能性UI的总序列时长控制在800毫秒以内
- 以0.5倍速测试,验证编排效果
- 时长超过500毫秒的序列需提供跳过选项
- :直接切换状态,不播放序列动画
prefers-reduced-motion