CSS3动画适合声明式简单交互,rAF适合需JS控制的复杂动画;二者可混合使用,如CSS处理缓动基底、rAF实现鼠标跟随与弹性效果。
JavaScript实现动画效果,核心在于控制元素在时间轴上的状态变化。CSS3动画和requestAnimationFrame(简称 rAF)不是互斥方案,而是适用场景不同:CSS3适合声明式、简单交互动画;rAF适合需要精确控制、复杂逻辑或动态计算的动画。
CSS3动画(包括 transition 和 @keyframes)由浏览器渲染引擎直接优化,通常运行在合成线程(compositor thread),不触发重排(reflow)和重绘(repaint),性能高且功耗低。
transform 和 opacity 属性动画)animation-play-state 或 currentTime)requestAnimationFrame 是浏览器提供的“下一帧绘制前执行回调”的机制,JS 动画的核心工具。它让动画节奏与屏
幕刷新率(通常是 60fps)同步,避免 setTimeout/setInterval 的丢帧和卡顿问题。
performance.now() 计算 delta time)element.style.left)会触发布局抖动,应优先用 transform + will-change 或直接操作 Canvas判断标准不是“哪个更好”,而是“哪个更合适”:
实现“跟随鼠标、带弹性阻尼”的悬浮气泡:
transform: translate() 和 transition: transform 0.2s ease-out 做缓动基底style.transform
不复杂但容易忽略:现代框架(如 React、Vue)中,优先用 CSS-in-JS 库(如 Framer Motion)或内置过渡系统,它们底层已智能融合 CSS 动画与 rAF,开发者只需关注状态和意图。