问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

HTML5 Canvas烟花效果代码实现

创作时间:
作者:
@小白创作中心

HTML5 Canvas烟花效果代码实现

引用
1
来源
1.
https://juejin.cn/post/7474642892448366633

本文将介绍如何使用HTML5 Canvas实现高密度粒子烟花效果,包括其原理、代码规划及关键部分的详细解释。

实现原理

烟花的模拟主要由以下几个部分组成:

  1. 烟花上升阶段:烟花从底部随机位置出发,以一定角度向目标高度上升。
  2. 烟花爆炸阶段:到达目标高度后,烟花爆炸并生成多个粒子向四周扩散。
  3. 粒子运动和衰减:粒子受空气阻力和重力影响,逐渐减速、下落并最终消失。

物理效果的主要实现方式:

  • 角度计算:使用Math.atan2计算烟花的上升角度,使其沿着正确轨迹前进。
  • 爆炸扩散:粒子具有随机的扩散方向、初始速度,并受空气阻力和重力影响。
  • 颜色变化:使用HSLA颜色模式,使粒子在爆炸过程中呈现色彩渐变效果。
  • 拖尾效果:使用半透明黑色背景覆盖画布,实现视觉上的动态残影。

代码规划

整个程序的核心由以下部分组成:

  1. Firework类
  • 负责管理烟花的上升过程,包括位置计算、目标高度检测。
  • 在到达目标高度后触发爆炸,生成多个粒子。
  1. Particle类
  • 负责管理粒子的运动,包括扩散方向、速度衰减、重力影响。
  • 控制粒子的颜色变化和透明度衰减,实现视觉效果。
  1. 主循环animate()
  • 负责更新和绘制所有烟花。
  • 控制新烟花的生成频率,确保画面流畅。
  • 移除已经消失的烟花,提高性能。

重点代码解析

烟花上升逻辑

this.x += Math.cos(this.angle) * this.speed;
this.y += Math.sin(this.angle) * this.speed;
  • 计算烟花的上升方向,使其沿着正确的轨迹前进。
  • Math.cosMath.sin结合角度计算,确保烟花向目标点移动。

烟花爆炸

for (let i = 0; i < particleCount; i++) {
    this.particles.push(new Particle(this.x, this.y, this.hue));
}
  • 生成particleCount个粒子,每个粒子的初始位置与烟花爆炸点相同。
  • 粒子的hue颜色基于烟花的颜色,但在爆炸过程中会有一定范围的变化。

粒子运动物理模拟

this.vx *= this.resistance;
this.vy *= this.resistance;
this.vy += this.gravity;
  • resistance代表空气阻力,逐渐减小粒子的速度。
  • gravity模拟重力,使粒子向下运动。
  • 这些参数配合可以让粒子表现出自然的爆炸扩散和下落效果。

颜色动态变化

get currentColor() {
    const currentHue = (this.baseHue + this.hueShift * (1 - this.alpha)) % 360;
    return `hsla(${currentHue}, 100%, 50%, ${this.alpha})`;
}
  • hueShift让粒子在爆炸过程中呈现丰富的色彩变化。
  • 透明度alpha逐渐减少,使粒子渐隐。
  • HSLA颜色模式允许粒子具有动态透明度。

运行效果

代码运行后,屏幕上会不断生成烟花,每个烟花爆炸后产生高密度的粒子,粒子颜色变化且逐渐消失。

视觉特效:

  • 拖尾效果:使用rgba(0, 0, 0, 0.08)作为背景覆盖,实现动态残影。
  • 动态色彩:粒子的hue值在爆炸过程中不断变化。
  • 自然物理效果:粒子扩散、减速、受重力影响逐渐下落。

可能的优化点

  • 增加交互性

  • 点击屏幕可以触发额外的烟花爆炸。

  • 根据鼠标位置影响烟花的生成。

  • 性能优化

  • 限制同时存在的烟花数量,避免过多粒子影响性能。

  • 使用requestAnimationFrame进行高效动画渲染。

  • 添加音效

  • 可以结合Audio API,在爆炸时播放烟花声音,提高沉浸感。

结论

本文介绍了如何使用HTML5 Canvas实现高密度粒子烟花效果,并分析了核心逻辑和关键代码。该效果可以用于网页背景动画或节日特效,进一步优化可以加入交互、音效等功能,使其更加生动。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号