CSS 动画与 JS 动画对比
trycoding.fun

CSS 动画与 JS 动画对比

CSS 动画和 JavaScript 动画的优缺点分析

问题

CSS 动画和 JavaScript 实现的动画分别有哪些优缺点?

解答

CSS 动画

优点

浏览器可以对 CSS 动画进行优化,比如使用 GPU 加速。代码相对简单,性能调优方向明确。对于低版本浏览器,CSS3 动画可以自然降级,而 JS 动画需要额外处理兼容性。

.box {
  animation: slide 1s ease-in-out;
}

@keyframes slide {
  from { transform: translateX(0); }
  to { transform: translateX(100px); }
}

缺点

运行过程控制较弱,无法在动画执行中附加事件或回调函数。复杂动画的 CSS 代码会变得冗长笨重,难以维护。

JavaScript 动画

优点

控制能力强,可以在动画播放过程中进行开始、暂停、回放、终止等操作。动画效果更丰富,曲线运动、冲击闪烁、视差滚动等复杂效果只能用 JS 实现。兼容性相对较好。

function animate(element, from, to, duration) {
  const start = Date.now();
  
  function step() {
    const progress = (Date.now() - start) / duration;
    if (progress < 1) {
      element.style.transform = `translateX(${from + (to - from) * progress}px)`;
      requestAnimationFrame(step);
    }
  }
  
  requestAnimationFrame(step);
}

缺点

代码复杂度高于 CSS 动画。JavaScript 在浏览器主线程中运行,与样式计算、布局、绘制等任务共享线程,可能造成阻塞和丢帧。

关键点

  • CSS 动画性能更好,浏览器可以优化,但控制能力有限
  • JS 动画控制灵活,可以实现复杂效果,但可能影响主线程性能
  • 简单动画优先使用 CSS,复杂交互动画使用 JS
  • 使用 requestAnimationFrame 可以优化 JS 动画性能
  • CSS 动画适合状态切换,JS 动画适合需要精确控制的场景