返回

过年前,我做了一个在线放鞭炮的动画!

前端

新年快到了,对于很多中国人来说,过年放鞭炮是一件很重要的事。虽然现在很多地方都禁放鞭炮了,但还是忍不住怀念小时候那种热闹的氛围。

于是我突发奇想,写了一个在线放鞭炮的动画。这个动画完全用代码实现,你可以把它嵌入到自己的博客或者网站中,让你的访客也能体验一下过年的气氛。

动画效果

动画的效果很简单,就是不断地生成鞭炮的图片,然后让它们从上往下移动。为了模拟鞭炮爆炸的效果,我还加入了一些音效。

你可以点击下面的按钮来体验一下这个动画:

放鞭炮动画

实现原理

这个动画是用 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>