返回
过年前,我做了一个在线放鞭炮的动画!
前端
2023-12-26 22:06:07
新年快到了,对于很多中国人来说,过年放鞭炮是一件很重要的事。虽然现在很多地方都禁放鞭炮了,但还是忍不住怀念小时候那种热闹的氛围。
于是我突发奇想,写了一个在线放鞭炮的动画。这个动画完全用代码实现,你可以把它嵌入到自己的博客或者网站中,让你的访客也能体验一下过年的气氛。
动画效果
动画的效果很简单,就是不断地生成鞭炮的图片,然后让它们从上往下移动。为了模拟鞭炮爆炸的效果,我还加入了一些音效。
你可以点击下面的按钮来体验一下这个动画:
实现原理
这个动画是用 JavaScript 实现的。首先,我创建了一个 canvas 元素,然后使用 canvas 的绘图 API 来绘制鞭炮的图片。
为了让鞭炮能够从上往下移动,我使用了一个循环来不断更新鞭炮的位置。在每次循环中,我都会清除画布,然后重新绘制鞭炮。
为了模拟鞭炮爆炸的效果,我使用了 HTML5 的 Audio API 来播放鞭炮的音效。
如何使用
你可以把这个动画嵌入到自己的博客或者网站中。只需要把下面的代码粘贴到你的 HTML 文件中即可:
<canvas id="fireworks" width="500" height="500"></canvas>
<script>
// 创建一个 canvas 元素
const canvas = document.getElementById('fireworks');
// 获取 canvas 的绘图上下文
const ctx = canvas.getContext('2d');
// 定义鞭炮的图片
const fireworkImage = new Image();
fireworkImage.src = 'firework.png';
// 定义鞭炮的音效
const fireworkSound = new Audio();
fireworkSound.src = 'firework.wav';
// 定义鞭炮的位置和速度
const fireworks = [];
for (let i = 0; i < 100; i++) {
fireworks.push({
x: Math.random() * canvas.width,
y: Math.random() * canvas.height,
speed: Math.random() * 5 + 1,
});
}
// 动画循环
function animate() {
// 清除画布
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制鞭炮
for (let i = 0; i < fireworks.length; i++) {
const firework = fireworks[i];
ctx.drawImage(fireworkImage, firework.x, firework.y);
// 更新鞭炮的位置
firework.y += firework.speed;
// 如果鞭炮已经超出画布,则将其移除
if (firework.y > canvas.height) {
fireworks.splice(i, 1);
}
}
// 播放鞭炮的音效
fireworkSound.play();
// 请求下一次动画帧
requestAnimationFrame(animate);
}
// 开始动画
animate();
</script>