基础概念: JS烟花爆炸效果是一种通过JavaScript和CSS实现的视觉效果,模拟烟花在空中绽放的过程。它通常涉及到动画、粒子系统以及随机性来创造逼真的烟花效果。
优势:
类型:
应用场景:
常见问题及解决方法:
问题一:烟花效果卡顿或不流畅
requestAnimationFrame代替setTimeout或setInterval来优化动画性能。问题二:烟花效果在不同设备上显示不一致
示例代码: 以下是一个简单的2D烟花效果的JavaScript和CSS代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS Fireworks</title>
<style>
body { margin: 0; overflow: hidden; }
canvas { display: block; }
</style>
</head>
<body>
<canvas id="fireworksCanvas"></canvas>
<script>
const canvas = document.getElementById('fireworksCanvas');
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
class Firework {
constructor() {
this.x = Math.random() * canvas.width;
this.y = canvas.height;
this.particles = [];
this.createParticles();
}
createParticles() {
for (let i = 0; i < 100; i++) {
this.particles.push(new Particle(this.x, this.y));
}
}
update() {
this.particles.forEach(particle => particle.update());
}
draw() {
this.particles.forEach(particle => particle.draw(ctx));
}
}
class Particle {
constructor(x, y) {
this.x = x;
this.y = y;
this.vx = Math.random() * 4 - 2;
this.vy = Math.random() * -8 - 4;
this.alpha = 1;
}
update() {
this.x += this.vx;
this.y += this.vy;
this.alpha -= 0.01;
}
draw(ctx) {
ctx.beginPath();
ctx.arc(this.x, this.y, 2, 0, Math.PI * 2);
ctx.fillStyle = `rgba(255, 100, 100, ${this.alpha})`;
ctx.fill();
}
}
let fireworks = [];
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
fireworks.forEach(firework => {
firework.update();
firework.draw();
});
fireworks = fireworks.filter(firework => firework.particles.some(particle => particle.alpha > 0));
requestAnimationFrame(animate);
}
setInterval(() => {
fireworks.push(new Firework());
}, 1000);
animate();
</script>
</body>
</html>这段代码创建了一个简单的2D烟花效果,其中包含了Firework和Particle两个类来分别表示烟花和粒子。通过不断创建新的烟花实例并更新其状态,实现了连续的烟花爆炸效果。