使用 HTML 和 CSS 实现绚丽的节日烟花效果

文章目录

  • 1. 效果预览
  • 2. 核心技术栈
  • 3. 核心代码解读
    • 3.1 HTML结构
    • 3.2 霓虹文字的CSS样式
      • 3.2.1 核心样式代码
      • 3.2.2 动画效果
    • 3.3 JavaScript 的烟花效果实现
      • 3.3.1 烟花上升
      • 3.3.2 粒子爆炸
  • 4. 用户交互
  • 5. 运行步骤
  • 总结

1. 效果预览

请添加图片描述

  • 打开后输入文本的展示内容
    在这里插入图片描述

  • 用户点击页面后播放背景音乐,并隐藏提示在这里插入图片描述

  • 绚丽的动态烟花效果,支持多种烟花形状:心型、螺旋形、圆形、六芒星型、星型、花朵型
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • 炫酷的霓虹文字效果,动态颜色渐变与光晕呼吸动画

  • 点击任意位置触发烟花爆炸,粒子颜色与样式随机

2. 核心技术栈

  • HTML5:搭建页面结构,定义容器和音频。
  • CSS3:实现动画效果(烟花、霓虹文字等)。
  • JavaScript:控制用户交互、生成烟花、随机效果等逻辑。

3. 核心代码解读

3.1 HTML结构

  • HTML 部分主要包含以下元素

    • 一个动态文字容器,顶部显示“节日快乐”字样。
    • 一个用于展示烟花效果的容器
    • 一个隐藏的背景音乐播放器
    • 一个提示用户点击的文字提示
  • 代码

<div class="dynamic-text" id="dynamicText">XXX,节日快乐!</div>
<div class="firework-container" id="firework-container"></div>
<div id="musicPrompt">点击页面任意位置播放音乐并观看烟花</div>
<audio id="backgroundMusic" loop>
  <source src="xue.mp3" type="audio/mpeg">
  您的浏览器不支持音频播放。
</audio>

3.2 霓虹文字的CSS样式

文字部分的样式通过 CSS 动画 增强,包括颜色渐变流动呼吸光晕效果以及动态文字的模糊效果

3.2.1 核心样式代码

  • 代码:
.dynamic-text {
  position: absolute;
  top: 20px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 48px;
  font-weight: bold;
  color: #fff;
  text-align: center;
  background: linear-gradient(90deg, #ff00ff, #ff8800, #ff00ff);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: gradient-flow 5s infinite linear, glow-pulse 2s infinite ease-in-out;
  text-shadow: 
    0 0 5px #ff00ff,
    0 0 10px #ff00ff,
    0 0 20px #ff00ff,
    0 0 40px #ff8800,
    0 0 80px #ff8800;
  letter-spacing: 5px;
}

3.2.2 动画效果

  • 渐变流动效果:通过 @keyframes gradient-flow,让文字的颜色渐变动态流动
  • 代码
@keyframes gradient-flow {
  0% {
    background-position: 0% 50%;
  }
  100% {
    background-position: 100% 50%;
  }
}
  • 光晕呼吸动画:通过 @keyframes glow-pulse,实现文字的光晕强弱交替变化
  • 代码
@keyframes glow-pulse {
  0%, 100% {
    text-shadow: 
      0 0 5px #ff00ff,
      0 0 10px #ff00ff,
      0 0 20px #ff00ff,
      0 0 40px #ff8800,
      0 0 80px #ff8800;
  }
  50% {
    text-shadow: 
      0 0 10px #ff00ff,
      0 0 20px #ff00ff,
      0 0 40px #ff00ff,
      0 0 60px #ff8800,
      0 0 100px #ff8800;
  }
}

3.3 JavaScript 的烟花效果实现

烟花效果是项目的核心部分,它通过 JavaScript 动态生成粒子,并为每个粒子赋予不同的运动轨迹

3.3.1 烟花上升

  • 每个烟花爆炸之前,会有一个火箭从页面底部升起
  • 火箭动画通过 CSS 的 @keyframes move-up 实现
  • 代码
@keyframes move-up {
  0% {
    transform: translateY(0);
  }
  100% {
    transform: translateY(-50vh);
  }
}
  • 使用 createFirework() 函数,动态生成火箭,并将其添加到 DOM 中
  • 代码
function createFirework(x = Math.random() * window.innerWidth, y = window.innerHeight * 0.5) {
  const rocket = document.createElement("div");
  rocket.classList.add("rocket");
  rocket.style.left = `${x}px`; // 设置火箭水平位置
  rocket.style.bottom = "0px"; // 从页面底部发射

  container.appendChild(rocket);

  // 火箭到达中间后爆炸
  rocket.addEventListener("animationend", () => {
    rocket.remove(); // 移除火箭
    explodeFirework(x, y); // 绽放烟花
  });
}

3.3.2 粒子爆炸

  • 每个烟花到达目标高度后,触发爆炸生成粒子
  • 粒子的动画由 @keyframes explode 实现,随机生成粒子的位置和颜色
  • 代码
@keyframes explode {
  0% {
    opacity: 1;
    transform: translate(0, 0) scale(1);
  }
  100% {
    opacity: 0;
    transform: translate(var(--dx), var(--dy)) scale(0.5);
  }
}
  • explodeFirework() 函数生成不同形状的烟花。支持多种形状,包括圆形、心型、星型、螺旋形、六芒星、花朵形等。
  • 代码
function explodeFirework(x, y) {
  const types = ["circle", "heart", "star", "spiral", "six-pointed", "flower"];
  const type = types[Math.floor(Math.random() * types.length)];
  const particleCount = 150;

  for (let i = 0; i < particleCount; i++) {
    const particle = document.createElement("div");
    particle.classList.add("particle");

    let dx, dy;

    if (type === "circle") {
      const angle = (i / particleCount) * Math.PI * 2;
      dx = Math.cos(angle) * 200;
      dy = Math.sin(angle) * 200;
    } else if (type === "heart") {
      const angle = (i / particleCount) * Math.PI * 2;
      dx = 16 * Math.pow(Math.sin(angle), 3) * 10;
      dy = -(13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle) - Math.cos(4 * angle)) * 10;
    } else if (type === "star") {
      const angle = (i % 5) * (Math.PI * 2) / 5;
      const distance = i % 2 === 0 ? 150 : 80;
      dx = Math.cos(angle) * distance;
      dy = Math.sin(angle) * distance;
    } 

4. 用户交互

  • 用户可以点击页面任意位置触发烟花,并播放背景音乐
  • 代码
// 用户点击播放音乐并隐藏提示
function playMusic() {
  backgroundMusic.play().catch((err) => {
    console.error("音乐播放失败:", err);
  });
  musicPrompt.style.display = "none"; // 隐藏提示
}

window.addEventListener("click", playMusic);

5. 运行步骤

  • 下载源码压缩包 —— 烟花实现

  • 解压文件

  • 双击烟花.html 即可通过浏览器打开在这里插入图片描述

  • 在弹出对话框中输入你要显示的文本在这里插入图片描述

  • 点击屏幕任意位置,播放背景音乐这里默认歌曲是《봄눈》(春雪)在这里插入图片描述

总结

  • 如有疑问,或遇到问题,请私信我或在评论区留言
  • 如果觉得还不错请给留下您宝贵的点赞收藏,感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944376.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金仓数据库之巡查KCP-客户端验证

巡查 查看KES 服务器的时区 show timezone;查看KES 服务器的时间 select now;查看KES 无故障运行时长 select now-sys_postmaster_start_time as uptime;查看数据库占用的磁盘空间 查看数据库占用的磁盘空间 select sys_database_size(current_database)/1024/1024; sele…

二分和离散化

为什么把二分和离散化放一起&#xff1a;因为离散化其实是一种二分整数的过程。 二分 相信大家都接触过二分查找&#xff08;折半查找&#xff09;&#xff0c;这就是二分的思想。 二分通过每次舍弃一半并不存在答案的区间&#xff0c;进而快速锁定要求的答案&#xff08;二…

OpenCV-Python实战(9)——滤波降噪

一、均值滤波器 cv2.blur() img cv2.blur(src*,ksize*,anchor*,borderType*)img&#xff1a;目标图像。 src&#xff1a;原始图像。 ksize&#xff1a;滤波核大小&#xff0c;&#xff08;width&#xff0c;height&#xff09;。 anchor&#xff1a;滤波核锚点&#xff0c…

Java MySQL 连接

Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库。 Java 连接 MySQL 需要驱动包&#xff0c;最新版下载地址为&#xff1a;http://dev.mysql.com/downloads/connector/j/&#xff0c;解压后得到 jar 库文件&#xff0c;然后在对应的项目中导…

【二叉树遍历 Java版】二叉树的前中后序遍历and层次遍历

二叉树的前中后序遍历and层次遍历 深度优先遍历题目链接递归前序遍历中序遍历后序遍历 迭代前序遍历后序遍历中序遍历 统一迭代前序遍历后序遍历中序遍历 广度优先遍历102. 二叉树的层序遍历107. 二叉树的层序遍历 II637. 二叉树的层平均值199. 二叉树的右视图 深度优先遍历 深…

ShaderJoy ——一种可交互的翻页效果【GLSL】

效果视频 Shader 特效——可与鼠标交互的翻页效果 效果图 完整代码 #define pi 3.14159265359 #define radius .1#iChannel0 "file://./images/Woolly_3.png" #iChannel1 "file://./images/Woolly_4.png"void mainImage( out vec4 fragColor, in vec2 fra…

贝叶斯神经网络(Bayesian Neural Network)

最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。 贝叶斯神经网络(Bayesian Neural Network) 贝叶斯神经网络(Bayesian Neural Network)1. BNN 的核心思想2. BNN 的优化目标3. BNN 的结构与特点4. BNN 的训练过程5. BNN 的优缺点6. …

Socket学习(一):控制台聊天demo

实现效果 客户端连接服务端后&#xff0c;可在控制台输入要发送的消息&#xff0c;服务端收到消息后自动回复消息并将消息转发给所有连接上的客户端&#xff1a; 服务端收到消息并回复 客户端1发送消息并接收服务端的回复 客户端2接收服务端转发的消息 源码 SocketServer…

word中文献引用[]符号的上下标格式修改

word中文献引用[]符号的上下标格式修改 百度网址 1、查找打开使用通配符&#xff0c;输入[[][0-9]{1,2}[]]&#xff0c;即可匹配所有的字[1],[12]这些字符&#xff0c;然后鼠标点击替换为的空白处&#xff0c;再点击特殊格式–>“字体”&#xff0c;选中上标&#xff0c;最…

3.若依前端项目拉取、部署、访问

因为默认RuoYi-Vue是使用的Vue2,所以需要另外去下载vue3来部署。 拉取代码 git clone https://gitee.com/ys-gitee/RuoYi-Vue3.git 安装node才能执行npm相关的命令 执行命令npm install 如果npm install比较慢的话&#xff0c;需要添加上国内镜像 npm install --registrhttp…

在线学习平台-项目技术点-前台

报错解决方法 1、P166-尚硅谷_在线教育_Nuxt整合错误_nuxt friendly-errors-CSDN博客 2、P168 3、P170 4、P173 npm remove axios npm install axios0.18.0 1、服务端渲染技术NUXT 1.1服务端渲染SSR 服务端渲染又称SSR (Server Side Render)是在服务端完成页面的内容&…

Java-02 深入浅出 MyBatis - MyBatis 快速入门(无 Spring) POM Mapper 核心文件 增删改查

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Mysql进阶SQL优化

SQL优化在开发场景中必不可少的技能之一&#xff0c;它能最大限度的提升SQL查询性能&#xff0c;如果随意使用也会出现不可预料的结局。 1、为什么要优化SQL 我们先说说不优化SQL造成什么现象。常见问题是响应时间长&#xff0c;用户体验感低。数据库频繁争抢锁&#xff0c;浪…

SpringBoot使用外置的Servlet容器(详细步骤)

嵌入式Servlet容器&#xff1a;应用打成可执行的jar 优点&#xff1a;简单、便携&#xff1b; 缺点&#xff1a;默认不支持JSP、优化定制比较复杂.&#xff1b; 外置的Servlet容器&#xff1a;外面安装Tomcat---应用war包的方式打包&#xff1b; 操作步骤&#xff1a; 方式一&…

基于统计分析与随机森林的环境条件对生菜生长的影响研究

1.项目背景 随着现代农业的发展&#xff0c;对植物生长过程中环境因素的影响有了越来越多的关注&#xff0c;基于2023年8月3日至2023年9月19日期间记录的70个不同生菜样本的生长数据进行分析&#xff0c;可以更好地理解温度、湿度、pH值和总溶解固体&#xff08;TDS&#xff0…

Bitmap(BMP)图像信息分析主要说明带压缩的形式

文章目录 参考资料Bitmap图片结构Bitmap图片组成实例说明 参考资料 微软官方-位图存储 Bitmap图片结构 序号名称说明1Bitmap File HeaderBitmap文件头2Bitmap Info HeaderBitmap信息头3Color Palette Data调色板数据4Bitmap Image Data图像数据 说明 Bitmap文件头的大小为…

百度热力图数据日期如何选择

目录 1、看日历2、看天气 根据研究内容定&#xff0c;一般如果研究城市活力的话&#xff0c;通常会写“非重大节假日&#xff0c;非重大活动&#xff0c;非极端天气等”。南方晴天不多&#xff0c;有小雨或者中雨都可认为没有影响&#xff0c;要不然在南方很难找到完全一周没有…

基于ArcGIS Pro的SWAT模型在流域水循环、水生态模拟中的应用及案例分析;SWAT模型安装、运行到结果读取全流程指导

目前&#xff0c;流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型&#xff0c;能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111

文章目录 一、算法概念111二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务…

tryhackme-Cyber Security 101-Cryptography-Cryptography Basics(加密基础)

目的&#xff1a;了解加密和对称加密的基础知识。 任务1&#xff1a;介绍 你有没有想过如何防止第三方阅读你的消息&#xff1f;您的应用程序 或 Web 浏览器如何与远程服务器建立安全通道&#xff1f;安全是指没有人可以读取或更改交换的数据;此外&#xff0c;我们可以确信我们…