动画js怎么实现
实现动画的 JavaScript 方法
使用 JavaScript 实现动画可以通过多种方式完成,包括原生 API、CSS 结合 JavaScript 或第三方库。以下是几种常见的方法:
使用 requestAnimationFrame
requestAnimationFrame 是浏览器提供的原生 API,适合实现高性能动画。它会自动优化帧率,并在浏览器重绘前执行回调函数。
function animate() {
const element = document.getElementById('animated-element');
let position = 0;
function step(timestamp) {
position += 1;
element.style.left = position + 'px';
if (position < 200) {
requestAnimationFrame(step);
}
}
requestAnimationFrame(step);
}
animate();
使用 CSS @keyframes 与 JavaScript 控制
通过 CSS 定义动画关键帧,再用 JavaScript 动态添加或移除类名触发动画。
@keyframes slide {
from { transform: translateX(0); }
to { transform: translateX(200px); }
}
.slide-animation {
animation: slide 2s ease-in-out;
}
const element = document.getElementById('animated-element');
element.classList.add('slide-animation');
使用 setInterval 或 setTimeout
虽然不推荐用于复杂动画,但简单动画可以通过定时器实现。
const element = document.getElementById('animated-element');
let position = 0;
const interval = setInterval(() => {
position += 1;
element.style.left = position + 'px';
if (position >= 200) {
clearInterval(interval);
}
}, 16);
使用第三方库(如 GSAP)
GSAP(GreenSock Animation Platform)是专业的动画库,提供更丰富的功能和更好的性能。

gsap.to("#animated-element", {
x: 200,
duration: 2,
ease: "power1.out"
});
性能优化建议
- 优先使用
requestAnimationFrame或 CSS 动画,避免直接操作 DOM 样式。 - 使用
transform和opacity属性实现动画,这些属性会触发硬件加速。 - 避免频繁的重排(reflow)和重绘(repaint)。
常见动画效果示例
淡入淡出效果
function fadeIn(element, duration) {
let opacity = 0;
const interval = 10;
const delta = interval / duration;
const timer = setInterval(() => {
opacity += delta;
element.style.opacity = opacity;
if (opacity >= 1) {
clearInterval(timer);
}
}, interval);
}
fadeIn(document.getElementById('element'), 1000);
缩放效果
function scale(element, targetScale, duration) {
const startScale = 1;
const startTime = performance.now();
function update(currentTime) {
const elapsed = currentTime - startTime;
const progress = Math.min(elapsed / duration, 1);
const scale = startScale + (targetScale - startScale) * progress;
element.style.transform = `scale(${scale})`;
if (progress < 1) {
requestAnimationFrame(update);
}
}
requestAnimationFrame(update);
}
scale(document.getElementById('element'), 1.5, 500);
通过以上方法,可以根据需求选择合适的动画实现方式。复杂场景推荐使用 GSAP 或 Anime.js 等专业库简化开发。






