Animation与Transition的异同

160 阅读2分钟

Animation与Transition的异同

AnimationTransition 是 CSS 中用于实现动态效果的两种主要方式,它们各有特点,适用于不同的场景。以下是它们的异同点:

相同点

  1. 实现动态效果

    • 两者都可以用来实现元素的动态效果,如颜色变化、位置移动、大小调整等。
  2. 基于 CSS

    • 都是纯 CSS 实现,无需 JavaScript 参与。
  3. 支持属性变化

    • 都可以对 CSS 属性(如 colortransformopacity 等)进行动态变化。
  4. 性能优化

    • 两者都支持硬件加速,性能较好。

不同点

特性AnimationTransition
定义方式通过@keyframes 定义复杂的多阶段动画。通过transition 定义简单的属性过渡。
控制能力支持多阶段、循环、反向等复杂控制。仅支持从初始状态到结束状态的过渡。
触发方式自动触发或通过 JavaScript 控制。需要状态变化(如:hover、类名切换)。
时间轴支持定义完整的时间轴(@keyframes)。仅支持从开始到结束的过渡。
循环播放支持(animation-iteration-count)。不支持。
延迟支持(animation-delay)。支持(transition-delay)。
暂停与继续支持(animation-play-state)。不支持。
关键帧支持定义多个关键帧。仅支持开始和结束两个状态。
适用场景复杂动画(如多阶段、循环动画)。简单过渡(如悬停效果、状态切换)。

示例对比

Transition 示例

.button {
    background-color: blue;
    transition: background-color 0.3s ease;
}

.button:hover {
    background-color: red;
}
  • 特点:当鼠标悬停时,按钮背景色从蓝色过渡到红色。

Animation 示例

@keyframes slideIn {
    0% {
        transform: translateX(-100%);
    }
    100% {
        transform: translateX(0);
    }
}

.box {
    animation: slideIn 1s ease-in-out infinite;
}
  • 特点:元素从左侧滑入,无限循环播放。

总结

特性AnimationTransition
复杂度
控制能力
触发方式自动或手动需要状态变化
适用场景复杂动画(如多阶段、循环动画)简单过渡(如悬停效果、状态切换)
  • 如果需要实现复杂的多阶段动画,选择 Animation
  • 如果需要实现简单的状态过渡,选择 Transition

根据具体需求选择合适的工具,可以更高效地实现动态效果!

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github