当前位置:首页 > JavaScript

js 实现烟花

2026-01-31 23:30:46JavaScript

实现烟花效果的 JavaScript 代码

以下是一个使用 Canvas 和 JavaScript 实现烟花效果的完整代码示例。该代码会创建多个烟花粒子,模拟爆炸和下落的效果。

// 获取 Canvas 元素和上下文
const canvas = document.getElementById('fireworksCanvas');
const ctx = canvas.getContext('2d');

// 设置 Canvas 大小为窗口大小
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

// 烟花粒子类
class Particle {
  constructor(x, y, color) {
    this.x = x;
    this.y = y;
    this.color = color;
    this.velocity = {
      x: (Math.random() - 0.5) * 8,
      y: (Math.random() - 0.5) * 8
    };
    this.alpha = 1;
    this.decay = Math.random() * 0.015 + 0.01;
    this.size = Math.random() * 3 + 1;
  }

  update() {
    this.velocity.y += 0.05; // 重力
    this.x += this.velocity.x;
    this.y += this.velocity.y;
    this.alpha -= this.decay;
  }

  draw() {
    ctx.save();
    ctx.globalAlpha = this.alpha;
    ctx.fillStyle = this.color;
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
    ctx.closePath();
    ctx.fill();
    ctx.restore();
  }
}

// 烟花数组
let particles = [];

// 创建烟花
function createFirework(x, y) {
  const particleCount = 150;
  const hue = Math.floor(Math.random() * 360);

  for (let i = 0; i < particleCount; i++) {
    particles.push(new Particle(x, y, `hsl(${hue}, 100%, 50%)`));
  }
}

// 动画循环
function animate() {
  requestAnimationFrame(animate);
  ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
  ctx.fillRect(0, 0, canvas.width, canvas.height);

  for (let i = 0; i < particles.length; i++) {
    particles[i].update();
    particles[i].draw();

    if (particles[i].alpha <= 0) {
      particles.splice(i, 1);
      i--;
    }
  }
}

// 点击或自动创建烟花
canvas.addEventListener('click', (e) => {
  createFirework(e.clientX, e.clientY);
});

// 自动随机生成烟花
setInterval(() => {
  const x = Math.random() * canvas.width;
  const y = Math.random() * canvas.height / 2;
  createFirework(x, y);
}, 1000);

// 开始动画
animate();

HTML 部分

需要将以下 HTML 代码添加到页面中:

<!DOCTYPE html>
<html>
<head>
  <title>烟花效果</title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
      background-color: #000;
    }
    canvas {
      display: block;
    }
  </style>
</head>
<body>
  <canvas id="fireworksCanvas"></canvas>
  <script src="fireworks.js"></script>
</body>
</html>

代码说明

  1. Canvas 设置:代码首先获取 Canvas 元素并设置其大小为窗口大小,为绘制烟花做好准备。

  2. 粒子类Particle 类定义了每个烟花粒子的属性,包括位置、速度、颜色、透明度和大小。update 方法处理粒子的运动逻辑,draw 方法负责绘制粒子。

  3. 烟花创建createFirework 函数在指定位置创建多个随机颜色的粒子,模拟烟花爆炸效果。

    js 实现烟花

  4. 动画循环animate 函数是核心动画循环,清除画布并更新、绘制所有粒子,移除透明度为0的粒子。

  5. 交互:代码支持点击触发烟花和自动随机生成烟花两种模式。

自定义选项

  1. 调整粒子数量:修改 particleCount 的值可以改变每个烟花的粒子数量,数值越大效果越密集。

    js 实现烟花

  2. 改变颜色:使用 HSL 颜色模式可以轻松生成鲜艳的颜色,调整 hue 值范围或使用固定颜色数组可以实现不同效果。

  3. 调整重力:修改 this.velocity.y += 0.05 中的数值可以改变粒子下落速度,数值越大下落越快。

  4. 改变烟花大小:调整 this.size 的计算公式可以改变粒子大小,实现不同风格的烟花效果。

  5. 调整消失速度:修改 this.decay 的计算公式可以控制粒子消失的速度,数值越大消失越快。

这个实现提供了基础的烟花效果,可以根据需要进一步扩展,如添加声音效果、不同类型的烟花图案或更复杂的物理模拟。

标签: 烟花js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…