目录
- [PowerPoint 动画类型](#PowerPoint 动画类型)
- [安装 PowerPoint 处理库](#安装 PowerPoint 处理库)
- [使用 Python 为形状添加动画](#使用 Python 为形状添加动画)
- 将动画更改为退出效果
- [使用 Python 添加动作路径动画](#使用 Python 添加动作路径动画)
- 设置动画持续时间和重复方式
- 为同一个形状添加进入和退出动画
- 为文本添加动画
- 创建一个包含多种动画的完整示例
- [读取 PowerPoint 中的动画信息](#读取 PowerPoint 中的动画信息)
- 将动画信息导出为文本文件
- 使用时需要注意的问题
- 总结
PowerPoint 动画可以控制文字、图片和形状在放映过程中的出现、移动、强调与消失方式。
在产品演示、培训课件和数据汇报中,适当使用动画可以帮助观众按照预定顺序阅读页面内容。例如,先显示标题,再依次展示几个要点,最后让辅助图形退出页面。
如果只处理少量幻灯片,可以直接在 PowerPoint 中手动设置。但在批量生成演示文稿或统一调整动画风格时,通过 Python 给 PPT 添加动画会更加方便。
本文将介绍如何使用 Python 在 PowerPoint 中:
- 为形状添加预设动画
- 将兼容的动画效果更改为退出类型
- 创建自定义动作路径动画
- 设置动画持续时间和重复方式
- 为指定文本段落添加动画
- 为同一个对象添加多个动画
- 读取演示文稿中的动画信息

PowerPoint 动画类型
在开始前,有必要先了解 PowerPoint 中的动画类型。PowerPoint 动画通常可以分为以下 4 类:
| 动画类型 | 作用 |
|---|---|
| 进入动画 | 控制对象如何出现在幻灯片中 |
| 强调动画 | 对已经显示的对象进行突出展示 |
| 退出动画 | 控制对象如何离开或消失 |
| 路径动画 | 让对象沿指定路线移动 |
安装 PowerPoint 处理库
要在 PowerPoint 中添加动画,可以使用 Spire.Presentation for Python。该库支持创建、读取和编辑 .ppt 和 .pptx 文件,并且不要求运行环境安装微软 PowerPoint。
你可以通过以下 pip 命令安装该库:
bash
pip install Spire.Presentation
安装完成后,导入相关模块:
python
from spire.presentation import *
from spire.presentation.common import *
使用 Python 为形状添加动画
下面的示例创建一个 PowerPoint 文件,在第一张幻灯片中添加矩形,并为矩形设置淡入旋转动画。
python
from spire.presentation import *
from spire.presentation.common import *
# 创建演示文稿
presentation = Presentation()
try:
# 获取第一张幻灯片
slide = presentation.Slides[0]
# 添加矩形
shape = slide.Shapes.AppendShape(
ShapeType.Rectangle,
RectangleF.FromLTRB(100, 150, 400, 250)
)
# 设置形状填充和边框
shape.Fill.FillType = FillFormatType.Solid
shape.Fill.SolidColor.Color = Color.get_LightBlue()
shape.ShapeStyle.LineColor.Color = Color.get_White()
# 添加文本
shape.AppendTextFrame("季度销售报告")
# 添加淡入旋转动画
slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.FadedSwivel
)
# 保存演示文稿
presentation.SaveToFile(
"形状动画.pptx",
FileFormat.Pptx2013
)
finally:
presentation.Dispose()
添加动画的核心代码是:
python
slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.FadedSwivel
)
其中:
Timeline表示幻灯片的动画时间线。MainSequence表示主动画序列。AddEffect()用于为指定对象添加动画。AnimationEffectType.FadedSwivel表示淡入旋转效果。
使用其他预设动画效果:
修改 AnimationEffectType 即可为形状应用不同的预设动画效果。
例如,使用飞入动画:
python
slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Fly
)
使用浮动动画:
python
slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Float
)
使用随机线条动画:
python
slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.RandomBars
)
使用缩放动画:
python
slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Zoom
)
不同版本的 PowerPoint 对部分动画效果的显示可能存在差异。因此,在批量生成文件前,建议先使用目标 PowerPoint 版本测试输出结果。
将动画更改为退出效果
有些动画效果既可以作为进入动画,也可以作为退出动画。用 AddEffect() 添加时,它默认是"进入"效果;如果你想让它变成"退出"效果,可通过修改 PresetClassType 的值为 Exit 来实现。
下面以 RandomBars 为例,先为五角星添加随机线条效果,再将其更改为退出动画:
python
from spire.presentation import *
from spire.presentation.common import *
presentation = Presentation()
try:
slide = presentation.Slides[0]
# 添加五角星
star_shape = slide.Shapes.AppendShape(
ShapeType.FivePointedStar,
RectangleF.FromLTRB(220, 100, 420, 300)
)
# 设置形状样式
star_shape.Fill.FillType = FillFormatType.Solid
star_shape.Fill.SolidColor.Color = Color.get_LightBlue()
star_shape.ShapeStyle.LineColor.Color = Color.get_White()
# 在五角星中添加文本
star_shape.AppendTextFrame("重点内容")
# 添加随机线条动画效果
effect = slide.Timeline.MainSequence.AddEffect(
star_shape,
AnimationEffectType.RandomBars
)
# 将当前动画分类更改为退出效果
effect.PresetClassType = TimeNodePresetClassType.Exit
# 保存文件
presentation.SaveToFile(
"形状退出动画.pptx",
FileFormat.Pptx2013
)
finally:
presentation.Dispose()
关键代码是:
python
effect.PresetClassType = TimeNodePresetClassType.Exit
设置后,随机线条动画会作为退出效果播放,五角星将通过该效果离开页面。
需要注意,PresetClassType 用于更改动画所属的类别,而不是更换 AnimationEffectType 本身。
如果选用的动画类型本身已经明确属于退出效果,就不需要再次将 PresetClassType 设置为 Exit。
使用 Python 添加动作路径动画
动作路径动画能让文本、图片或形状沿着指定路线移动。与普通的进入/退出动画不同,它需要同时具备"动画效果"和一条几何路径,该路径需定义起点、中间路径节点和终点。AnimationEffectType 枚举提供了多种预设动作路径效果;当设置为 PathUser 时,你可以创建自定义动作路径。
下面的示例创建一个自定义动作路径,让矩形依次经过三个位置:
python
from spire.presentation import *
from spire.presentation.common import *
presentation = Presentation()
try:
slide = presentation.Slides[0]
# 添加矩形
shape = slide.Shapes.AppendShape(
ShapeType.Rectangle,
RectangleF.FromLTRB(100, 150, 250, 250)
)
# 设置形状样式
shape.Fill.FillType = FillFormatType.Solid
shape.Fill.SolidColor.Color = Color.get_LightBlue()
shape.ShapeStyle.LineColor.Color = Color.get_White()
# 添加文本
shape.AppendTextFrame("移动对象")
# 添加自定义动作路径动画
effect = slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.PathUser
)
# 获取动画行为集合
common_behaviors = effect.CommonBehaviorCollection
# 获取动作路径行为
motion = common_behaviors[0]
# 设置路径坐标的参考方式
motion.Origin = AnimationMotionOrigin.Layout
# 使用相对坐标编辑路径
motion.PathEditMode = (
AnimationMotionPathEditMode.Relative
)
# 创建动作路径
motion_path = MotionPath()
# 定义路径上的位置
start_point = PointF(0.0, 0.0)
second_point = PointF(0.1, 0.1)
third_point = PointF(-0.1, 0.2)
# 设置路径起点
motion_path.Add(
MotionCommandPathType.MoveTo,
[start_point],
MotionPathPointsType.CurveAuto,
True
)
# 从起点移动到第二个位置
motion_path.Add(
MotionCommandPathType.LineTo,
[second_point],
MotionPathPointsType.CurveAuto,
True
)
# 从第二个位置移动到第三个位置
motion_path.Add(
MotionCommandPathType.LineTo,
[third_point],
MotionPathPointsType.CurveAuto,
True
)
# 结束动作路径
motion_path.Add(
MotionCommandPathType.End,
[],
MotionPathPointsType.CurveStraight,
True
)
# 将自定义路径应用到动画
motion.Path = motion_path
# 保存文件
presentation.SaveToFile(
"自定义动作路径动画.pptx",
FileFormat.Pptx2013
)
finally:
presentation.Dispose()
动作路径命令说明:
示例中使用了以下三种命令:
| 命令 | 作用 |
|---|---|
MoveTo |
设置动作路径的起点 |
LineTo |
让对象移动到下一个指定位置 |
End |
结束当前动作路径 |
一个普通路径通常由以下顺序组成:
text
MoveTo → LineTo → LineTo → End
如果需要更复杂的路线,可以继续添加更多位置:
python
fourth_point = PointF(0.2, -0.1)
motion_path.Add(
MotionCommandPathType.LineTo,
[fourth_point],
MotionPathPointsType.CurveAuto,
True
)
示例使用的是相对坐标:
python
motion.PathEditMode = (
AnimationMotionPathEditMode.Relative
)
因此,PointF 中的值表示对象相对于幻灯片布局的移动量。建议从较小的数值开始测试,避免对象移动到页面之外。
设置动画持续时间和重复方式
添加动画后,还可以通过 Timing 设置动画持续时间、重复类型和重复次数。
下面的示例将缩放动画的持续时间设置为 2 秒,并让动画重复 3 次:
python
from spire.presentation import *
from spire.presentation.common import *
presentation = Presentation()
try:
slide = presentation.Slides[0]
# 添加圆形
shape = slide.Shapes.AppendShape(
ShapeType.Ellipse,
RectangleF.FromLTRB(220, 150, 420, 350)
)
# 设置形状样式
shape.Fill.FillType = FillFormatType.Solid
shape.Fill.SolidColor.Color = Color.get_LightBlue()
shape.ShapeStyle.LineColor.Color = Color.get_White()
# 添加文本
shape.AppendTextFrame("重复播放")
# 添加缩放动画
effect = slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Zoom
)
# 设置单次动画的持续时间,单位为秒
effect.Timing.Duration = 2.0
# 将重复方式设置为按次数重复
effect.Timing.AnimationRepeatType = (
AnimationRepeatType.Number
)
# 设置重复次数
effect.Timing.RepeatCount = 3
# 保存文件
presentation.SaveToFile(
"动画时间与重复设置.pptx",
FileFormat.Pptx2013
)
finally:
presentation.Dispose()
Duration 用于设置单次动画的持续时间,单位为秒。当重复类型设置为 Number 时,RepeatCount 用于指定动画的重复次数。
除了按指定次数重复,还可以让动画一直重复到当前幻灯片结束:
python
effect.Timing.AnimationRepeatType = (
AnimationRepeatType.UtilEndOfSlide
)
常用Timing设置:
| 属性 | 作用 |
|---|---|
Timing.Duration |
设置单次动画的持续时间 |
Timing.AnimationRepeatType |
设置动画的重复方式 |
Timing.RepeatCount |
设置按次数重复时的重复次数 |
Timing.AutoReverse |
设置动画完成后是否反向播放 |
Timing.TriggerDelayTime |
设置触发动画后的延迟时间 |
例如,让动画播放完成后反向播放:
python
effect.Timing.AutoReverse = True
设置动画延迟 1 秒开始:
python
effect.Timing.TriggerDelayTime = 1.0
为同一个形状添加进入和退出动画
一个对象可以同时包含多个动画。
例如,可以先让五角星以淡入旋转方式出现,再使用随机线条效果退出:
python
# 添加进入动画
slide.Timeline.MainSequence.AddEffect(
star_shape,
AnimationEffectType.FadedSwivel
)
# 添加随机线条效果
exit_effect = slide.Timeline.MainSequence.AddEffect(
star_shape,
AnimationEffectType.RandomBars
)
# 将随机线条动画更改为退出类型
exit_effect.PresetClassType = (
TimeNodePresetClassType.Exit
)
两个动画都会添加到当前幻灯片的主动画序列中。
通常情况下,代码添加动画的先后顺序也会影响它们在 PowerPoint 动画窗格中的排列顺序。
为文本添加动画
PowerPoint 中的文本通常位于形状的文本框中。因此,为文本添加动画时,需要先为形状添加动画效果,再指定动画作用的文本段落。
下面的示例为矩形中的第一个段落添加浮动动画:
python
from spire.presentation import *
from spire.presentation.common import *
presentation = Presentation()
try:
slide = presentation.Slides[0]
# 添加矩形文本框
shape = slide.Shapes.AppendShape(
ShapeType.Rectangle,
RectangleF.FromLTRB(100, 120, 600, 250)
)
# 设置形状样式
shape.Fill.FillType = FillFormatType.Solid
shape.Fill.SolidColor.Color = Color.get_LightBlue()
shape.ShapeStyle.LineColor.Color = Color.get_White()
# 添加文本
shape.AppendTextFrame(
"自动处理重复的演示文稿任务。"
)
# 为形状添加浮动动画
animation = slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Float
)
# 指定动画应用于第一个段落
animation.SetStartEndParagraphs(0, 0)
# 保存文件
presentation.SaveToFile(
"文本段落动画.pptx",
FileFormat.Pptx2013
)
finally:
presentation.Dispose()
段落索引从 0 开始。
为多个文本段落分别添加动画
如果一个文本框中包含多个要点,可以为每个段落分别添加动画。
假设文本框中已经包含三个段落,可以这样设置:
python
# 第一个段落
effect_1 = slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Float
)
effect_1.SetStartEndParagraphs(0, 0)
# 第二个段落
effect_2 = slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Float
)
effect_2.SetStartEndParagraphs(1, 1)
# 第三个段落
effect_3 = slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.Float
)
effect_3.SetStartEndParagraphs(2, 2)
这样可以让三个段落依次进入页面。
这种方式适合:
- 逐条展示产品优势
- 分步骤说明操作流程
- 按顺序讲解项目计划
- 逐项显示数据结论
- 控制培训内容的讲解节奏
如果多个段落应同时出现,可以将它们设置在同一个范围内:
python
effect.SetStartEndParagraphs(0, 2)
创建一个包含多种动画的完整示例
下面的代码创建一张简单的项目汇报幻灯片,并分别为标题、内容框和辅助图形添加动画。
python
from spire.presentation import *
from spire.presentation.common import *
presentation = Presentation()
try:
slide = presentation.Slides[0]
# 添加标题
title_shape = slide.Shapes.AppendShape(
ShapeType.Rectangle,
RectangleF.FromLTRB(60, 40, 660, 110)
)
title_shape.Fill.FillType = FillFormatType.Solid
title_shape.Fill.SolidColor.Color = Color.get_DarkBlue()
title_shape.ShapeStyle.LineColor.Color = Color.get_DarkBlue()
title_shape.AppendTextFrame("项目进度报告")
# 添加内容框
content_shape = slide.Shapes.AppendShape(
ShapeType.Rectangle,
RectangleF.FromLTRB(100, 150, 620, 300)
)
content_shape.Fill.FillType = FillFormatType.Solid
content_shape.Fill.SolidColor.Color = Color.get_LightBlue()
content_shape.ShapeStyle.LineColor.Color = Color.get_White()
# 添加内容
content_shape.AppendTextFrame(
"需求分析已完成\n"
"核心模块已交付\n"
"集成测试进行中"
)
# 添加五角星
star_shape = slide.Shapes.AppendShape(
ShapeType.FivePointedStar,
RectangleF.FromLTRB(280, 330, 440, 490)
)
star_shape.Fill.FillType = FillFormatType.Solid
star_shape.Fill.SolidColor.Color = Color.get_Yellow()
star_shape.ShapeStyle.LineColor.Color = Color.get_White()
# 标题进入动画
title_effect = slide.Timeline.MainSequence.AddEffect(
title_shape,
AnimationEffectType.FadedSwivel
)
title_effect.Timing.Duration = 1.5
# 内容文本动画
text_effect = slide.Timeline.MainSequence.AddEffect(
content_shape,
AnimationEffectType.Float
)
text_effect.SetStartEndParagraphs(0, 2)
text_effect.Timing.Duration = 2.0
# 五角星进入动画
star_effect = slide.Timeline.MainSequence.AddEffect(
star_shape,
AnimationEffectType.Zoom
)
star_effect.Timing.Duration = 1.0
# 添加随机线条效果
exit_effect = slide.Timeline.MainSequence.AddEffect(
star_shape,
AnimationEffectType.RandomBars
)
# 将随机线条动画更改为退出类型
exit_effect.PresetClassType = (
TimeNodePresetClassType.Exit
)
exit_effect.Timing.Duration = 1.5
# 保存结果
presentation.SaveToFile(
"带动画的项目进度报告.pptx",
FileFormat.Pptx2013
)
finally:
presentation.Dispose()
运行后生成的幻灯片包含以下动画:
- 标题以淡入旋转效果出现。
- 内容区域以浮动效果出现。
- 五角星以缩放效果进入。
- 随机线条效果被更改为退出类型,控制五角星离开页面。
读取 PowerPoint 中的动画信息
除了添加动画,还可以读取已有演示文稿中的动画效果。
下面的示例遍历所有幻灯片,并输出动画所在的页码、目标形状、动画类型、持续时间和重复设置:
python
from spire.presentation import *
from spire.presentation.common import *
presentation = Presentation()
try:
presentation.LoadFromFile(
"带动画的项目进度报告.pptx"
)
for slide in presentation.Slides:
sequence = slide.Timeline.MainSequence
for index in range(sequence.Count):
effect = sequence[index]
# 获取目标形状
shape = effect.ShapeTarget
# 优先读取替代标题
shape_name = shape.AlternativeTitle
# 替代标题为空时读取形状名称
if not shape_name:
shape_name = shape.Name
print(
f"幻灯片:{slide.SlideNumber},"
f"形状:{shape_name},"
f"动画效果:{effect.AnimationEffectType},"
f"持续时间:{effect.Timing.Duration} 秒,"
f"重复方式:"
f"{effect.Timing.AnimationRepeatType},"
f"重复次数:{effect.Timing.RepeatCount}"
)
finally:
presentation.Dispose()
属性说明:
| 属性 | 作用 |
|---|---|
slide.SlideNumber |
获取动画所在的幻灯片编号 |
effect.ShapeTarget |
获取动画所作用的形状 |
ShapeTarget.Name |
获取形状名称 |
ShapeTarget.AlternativeTitle |
获取形状替代标题 |
effect.AnimationEffectType |
获取动画效果类型 |
effect.Timing.Duration |
获取动画持续时间 |
effect.Timing.AnimationRepeatType |
获取动画重复方式 |
effect.Timing.RepeatCount |
获取动画重复次数 |
将动画信息导出为文本文件
对于页数较多的演示文稿,可以把动画信息输出到 TXT 文件中,便于统一检查。
python
from pathlib import Path
from spire.presentation import *
from spire.presentation.common import *
presentation = Presentation()
try:
presentation.LoadFromFile(
"带动画的项目进度报告.pptx"
)
output_lines = []
for slide in presentation.Slides:
sequence = slide.Timeline.MainSequence
output_lines.append(
f"===== 第 {slide.SlideNumber} 张幻灯片 ====="
)
if sequence.Count == 0:
output_lines.append("该幻灯片没有动画。")
output_lines.append("")
continue
for index in range(sequence.Count):
effect = sequence[index]
shape = effect.ShapeTarget
shape_name = shape.AlternativeTitle
if not shape_name:
shape_name = shape.Name
output_lines.append(
f"{index + 1}. "
f"形状:{shape_name};"
f"动画效果:{effect.AnimationEffectType};"
f"持续时间:{effect.Timing.Duration} 秒;"
f"重复方式:"
f"{effect.Timing.AnimationRepeatType};"
f"重复次数:{effect.Timing.RepeatCount}"
)
output_lines.append("")
Path("动画信息报告.txt").write_text(
"\n".join(output_lines),
encoding="utf-8"
)
finally:
presentation.Dispose()
这种方式可以用于:
- 检查哪些幻灯片包含动画
- 统计演示文稿中的动画数量
- 查找使用特定动画效果的对象
- 查看动画持续时间和重复方式
- 审核批量生成的演示文稿
- 统一调整动画风格前生成检查报告
使用时需要注意的问题
1. 动画顺序取决于主序列
多个动画都会保存到:
python
slide.Timeline.MainSequence
因此,在同一张幻灯片中连续添加多个效果时,应按照实际放映顺序组织代码。
例如:
python
# 先添加标题动画
sequence.AddEffect(
title_shape,
AnimationEffectType.Fly
)
# 再添加正文动画
sequence.AddEffect(
content_shape,
AnimationEffectType.Float
)
# 最后添加图形动画
sequence.AddEffect(
icon_shape,
AnimationEffectType.Zoom
)
清晰的代码顺序可以降低后续调整动画的难度。
2. 区分动画效果和动画分类
AnimationEffectType 表示具体效果,例如:
python
AnimationEffectType.RandomBars
AnimationEffectType.Fly
AnimationEffectType.Zoom
PresetClassType 表示动画所属的类别,例如进入、强调或退出。
部分动画类型已经明确属于退出效果,可以直接使用。还有一些效果可以同时用于进入和退出,当需要改变其用途时,再设置:
python
effect.PresetClassType = (
TimeNodePresetClassType.Exit
)
因此,不应将所有退出动画都理解为必须通过 PresetClassType 转换。
3. 动作路径需要完整定义
下面的代码只创建了一个用户自定义路径动画:
python
effect = slide.Timeline.MainSequence.AddEffect(
shape,
AnimationEffectType.PathUser
)
此时还没有实际移动路线。
必须继续创建 MotionPath,添加 MoveTo、LineTo 和 End 等命令,并将路径赋值给:
python
motion.Path = motion_path
4. Duration 表示单次播放时间
下面的代码将单次动画持续时间设置为 2 秒:
python
effect.Timing.Duration = 2.0
如果动画同时设置了重复次数,总播放时间还会受到 RepeatCount、自动反向播放和触发方式等设置的影响。
5. 重复类型和重复次数应配合使用
如果需要按照固定次数重复,可以设置:
python
effect.Timing.AnimationRepeatType = (
AnimationRepeatType.Number
)
effect.Timing.RepeatCount = 3
如果需要重复到幻灯片结束,可以设置:
python
effect.Timing.AnimationRepeatType = (
AnimationRepeatType.UtilEndOfSlide
)
后一种模式通常不需要再设置固定的 RepeatCount。
6. 文本动画使用段落索引
SetStartEndParagraphs() 的参数是段落索引,而不是文字位置。
例如:
python
animation.SetStartEndParagraphs(0, 2)
表示处理前三个段落,而不是前三个字符或前三行视觉文本。
如果文本框中的段落数量不足,范围设置可能无法得到预期结果。因此,在处理外部演示文稿时,应先检查文本结构。
7. 避免给所有对象添加复杂动画
动画过多会增加演示节奏的不确定性,也会提高后续人工调整的成本。
对于自动生成的演示文稿,更适合采用简单统一的规则,例如:
- 标题统一使用淡入动画
- 正文统一按段落出现
- 图表统一使用缩放动画
- 仅对关键结论使用强调效果
- 仅在需要表达移动过程时使用动作路径
8. 保留原始演示文稿
为已有 PowerPoint 添加动画时,建议保存为新文件:
text
原始演示文稿.pptx
带动画的演示文稿.pptx
这样可以避免动画顺序、持续时间或路径设置不符合预期时破坏原始文件。
9. 在 PowerPoint 中检查最终效果
代码可以写入动画效果,但实际放映节奏还会受到页面内容、动画数量和 PowerPoint 版本的影响。
生成文件后,建议在 PowerPoint 的放映模式和动画窗格中重点检查:
- 动画执行顺序
- 动画效果与动画分类
- 动作路径的位置和方向
- 动画持续时间
- 重复方式和重复次数
- 文本段落范围
- 对象是否重复播放
- 不同动画之间的衔接
总结
本文详细介绍了如何通过 Python 为 PowerPoint 中的形状和文本添加不同类型的动画,并读取已有演示文稿中的动画信息。
在批量生成培训课件、产品演示和项目汇报时,可以建立统一的动画规则,让标题、正文和关键图形按照固定顺序出现。
动画应服务于信息表达,而不是单纯增加视觉效果,因此更适合保持简单、一致并易于维护。