当前位置:   article > 正文

2024年春节HTML烟花代码:璀璨烟花特效,用代码迎接新春佳节_恭贺新春特效代码

恭贺新春特效代码

        随着2024年春节的临近,让我们用一种独特而创新的方式来庆祝这个传统节日。这篇文章将分享一个使用p5.js库创建的烟花特效代码,它不仅能够在屏幕上展示绚丽的烟花,还允许用户输入自定义的文字,比如“我爱你”,这些文字将随着烟花的绽放在夜空中灿烂闪耀。这个项目既适合编程爱好者探索和学习,也适合所有希望以一种独特的方式庆祝春节的人们。

我们的烟花特效是基于p5.js库实现的。p5.js是一个JavaScript库,它使得编程和创意表达变得更加容易和有趣。

效果图如下

在这个项目中,我们首先创建了一个HTML5画布来绘制烟花。接着,通过定义 FireworkParticle 两个类来分别处理烟花的生成、运动、爆炸和显示。每个 Firework 实例会生成一系列 Particle 实例,这些粒子模拟了烟花爆炸时的效果。

我们的代码允许用户通过一个文本输入框输入自定义的信息,这些信息将随着烟花在屏幕上展示。这增加了互动性和个性化,使每次烟花显示都是独一无二的。

以下是完整的代码,直接复制保存HTML文件即可:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>烟花特效</title>
  6. <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
  7. <style>
  8. html{
  9. width: 100%;
  10. overflow: hidden;
  11. }
  12. body {
  13. margin: 0;
  14. padding: 0;
  15. display: flex;
  16. justify-content: center;
  17. align-items: center;
  18. height: 100vh;
  19. background-color: black;
  20. }
  21. #fireworkInput {
  22. position: absolute;
  23. top: 20px;
  24. left: 50%;
  25. transform: translateX(-50%);
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <input type="text" id="fireworkInput" placeholder="请输入文字" oninput="updateFireworkText(this.value)">
  31. <script>
  32. let fireworks = [];
  33. let gravity;
  34. let fireworkText = "我爱你"; // 默认文字
  35. function setup() {
  36. createCanvas(windowWidth, windowHeight);
  37. colorMode(RGB);
  38. gravity = createVector(0, 0.2);
  39. stroke(255);
  40. strokeWeight(4);
  41. textSize(18);
  42. textAlign(CENTER, CENTER);
  43. }
  44. function draw() {
  45. background(0, 25); // 淡化背景以创建拖尾效果
  46. if (random(1) < 0.05) {
  47. fireworks.push(new Firework(fireworkText));
  48. }
  49. for (let firework of fireworks) {
  50. firework.update();
  51. firework.show();
  52. }
  53. fireworks = fireworks.filter(firework => !firework.done());
  54. }
  55. function updateFireworkText(value) {
  56. fireworkText = value || "我爱你"; // 如果输入为空,则默认显示“我爱你”
  57. }
  58. class Firework {
  59. constructor(text) {
  60. this.hu = random(255);
  61. this.firework = new Particle(random(width), height, this.hu, true, text, true);
  62. this.exploded = false;
  63. this.particles = [];
  64. }
  65. update() {
  66. if (!this.exploded) {
  67. this.firework.applyForce(gravity);
  68. this.firework.update();
  69. if (this.firework.vel.y >= 0) {
  70. this.exploded = true;
  71. this.explode();
  72. }
  73. }
  74. for (let particle of this.particles) {
  75. particle.applyForce(gravity);
  76. particle.update();
  77. }
  78. this.particles = this.particles.filter(particle => !particle.done());
  79. }
  80. explode() {
  81. // 创建一个大的带文本的粒子
  82. let mainParticle = new Particle(this.firework.pos.x, this.firework.pos.y, this.hu, false, this.firework.text, true);
  83. this.particles.push(mainParticle);
  84. // 创建一系列小的彩色粒子
  85. let explosionAmount = random(100, 150);
  86. for (let i = 0; i < explosionAmount; i++) {
  87. let p = new Particle(this.firework.pos.x, this.firework.pos.y, random(255), false, '', false);
  88. this.particles.push(p);
  89. }
  90. }
  91. show() {
  92. if (!this.exploded) {
  93. this.firework.show();
  94. }
  95. for (let particle of this.particles) {
  96. particle.show();
  97. }
  98. }
  99. done() {
  100. return this.exploded && this.particles.length === 0;
  101. }
  102. }
  103. class Particle {
  104. constructor(x, y, hu, firework, text, isMain) {
  105. this.pos = createVector(x, y);
  106. this.firework = firework;
  107. this.lifespan = 255;
  108. this.hu = hu;
  109. this.text = text;
  110. this.isMain = isMain; // 新增标志,表示是否为烟花主体
  111. if (this.firework) {
  112. this.vel = createVector(0, random(-18, -12));
  113. } else {
  114. this.vel = p5.Vector.random2D();
  115. this.vel.mult(random(4, 20));
  116. }
  117. this.acc = createVector(0, 0);
  118. }
  119. applyForce(force) {
  120. this.acc.add(force);
  121. }
  122. update() {
  123. if (!this.firework) {
  124. this.vel.mult(0.95);
  125. this.lifespan -= 4;
  126. }
  127. this.vel.add(this.acc);
  128. this.pos.add(this.vel);
  129. this.acc.mult(0);
  130. }
  131. done() {
  132. return this.lifespan < 0;
  133. }
  134. show() {
  135. colorMode(HSB);
  136. if (!this.firework) {
  137. strokeWeight(4);
  138. stroke(this.hu, 255, 255, this.lifespan);
  139. } else {
  140. strokeWeight(4);
  141. stroke(this.hu, 255, 255);
  142. }
  143. point(this.pos.x, this.pos.y);
  144. if (this.isMain) {
  145. fill(this.hu, 255, 255, this.lifespan);
  146. textSize(32); // 增加文本大小
  147. text(this.text, this.pos.x, this.pos.y);
  148. }
  149. }
  150. }
  151. </script>
  152. </body>
  153. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/85300?site
推荐阅读
相关标签
  

闽ICP备14008679号