JavaScript动画核心是定时更新样式属性形成视觉运动,推荐用transform/opacity等硬件加速属性避免重排;首选requestAnimationFrame、CSS transitions/keyframes、WAAPI等高性能方案,慎用触发重排的left/top和同步布局属性。
JavaScript 实现动画的核心思路是通过定时更新元素的样式属性(如 transform、opacity、left/top 等),在短时间内连续触发重绘,形成视觉上的运动效果。现代开发中优先推荐使用基于 CSS 的硬件加速方式(如 transform 和 opacity),避免触发重排(reflow),保证性能。
不依赖外部库,可直接用浏览器提供的 API 实现平滑、高性能动画:
requestAnimationFrame():浏览器推荐的动画主循环机制,比 setTimeout 或 setInterval 更精准、更节能,会自动适配屏幕刷新率(通常 60fps)。transition 规则(例如 transition: transform 0.3s ease-out;),适合简单状态切换动画。animation:用
JS 控制 element.style.animation 启动/暂停/重置动画,适合预设路径或复杂时序,配合 animationend 事件做后续逻辑。适合中小型项目或需要精细控制的场景:
gsap)和付费高级插件。浏览器原生支持的底层动画接口,比 CSS 动画更灵活,比手动 requestAnimationFrame 更易管理:
element.animate(keyframes, options) 直接播放动画,返回 Animation 对象,可控制 play()、pause()、reverse()、监听 onfinish 等。currentTime)、组合动画(effect 替换),但 IE 完全不支持,需检查兼容性或搭配 polyfill(如 web-animations-js)。为保障流畅体验和可维护性,注意以下常见误区:
offsetLeft、clientWidth 等触发同步重排的属性——它们会强制浏览器计算布局,严重拖慢动画。left/top 配合 position: relative/absolute 做位移动画——这类属性会触发重排;改用 transform: translateX()。transform 和 opacity 这类仅触发重绘(paint)或合成(composite)的属性。