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

news2024/12/31 22:48:44

文章目录

  • 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 即可通过浏览器打开在这里插入图片描述

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

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

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电力场景输电线路异物检测数据集VOC+YOLO格式4370张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4370 标注数量(xml文件个数)&#xff1a;4370 标注数量(txt文件个数)&#xff1a;4370 …

【Next.js】002-路由篇|App Router

【Next.js】002-路由篇|App Router 文章目录 【Next.js】002-路由篇|App Router一、前言二、文件系统&#xff08;file-system&#xff09;1、说明2、演练创建代码运行访问让 Cursor 分析错误别偷懒&#xff0c;还是探究一下 Pages Router 方式吧创建代码运行并访问项目/about …

【FPGA开发】ZYNQ中PS与PL交互操作总结、BRAM,DMA原理浅析、仿真操作

文章目录 PL与PS交互综述交互端口性能&特点&#xff08;选择方案的凭据&#xff09;GPIO-AXI_GPDMA-DMACHP-AXI_HPACP-AXI_ACP 数据交互实验GP通过BRAMPS为主机&#xff0c;读写BRAMPL作为主机&#xff0c;读写BRAM DMA方式交互 PL与PS交互综述 网络上关于PS PL交互的教程…

构建全志 T113 Tina SDK

1、环境配置&#xff1a; 准备一个 Ubuntu 系统&#xff0c;可以是 WSL&#xff0c;虚拟机等&#xff0c;建议版本是 20.04。 1.1、安装必要的软件 进入系统后&#xff0c;输入下方命令安装需要的工具 &#xff1a; sudo apt update -y sudo apt full-upgrade -y sudo apt i…

Linux 搭建 nginx+keepalived 高可用 | Nginx反向代理

注意&#xff1a;本文为 “Linux 搭建 nginxkeepalived (主备双主模式) 高可用 | Nginx反向代理” 相关文章合辑。 KeepalivedNginx实现高可用&#xff08;HA&#xff09; xyang0917 于 2016-09-17 00:24:15 发布 keepalived 的 HA 分为抢占模式和非抢占模式&#xff0c;抢占…

RDFS—RDF模型属性扩展解析

目录 前言1. 什么是RDFS&#xff1f;1.1 RDFS的核心概念1.2 RDFS与RDF的区别 2. RDFS的基础概念2.1 类&#xff08;Class&#xff09;2.2 属性&#xff08;Property&#xff09;2.3 关系&#xff08;Relation&#xff09;2.4 定义域&#xff08;Domain&#xff09;2.5 值域&…

rust windwos 两个edit框

use winapi::shared::minwindef::LOWORD; use windows::{core::*,Win32::{Foundation::*,Graphics::Gdi::{BeginPaint, EndPaint, PAINTSTRUCT},System::LibraryLoader::GetModuleHandleA,UI::WindowsAndMessaging::*,}, };// 两个全局静态变量&#xff0c;用于保存 Edit 控件的…

Python Polars快速入门指南:LazyFrames

前文已经介绍了Polars的Dataframe, Contexts 和 Expressions&#xff0c;本文继续介绍Polars的惰性API。惰性API是该库最强大的功能之一&#xff0c;使用惰性API可以设定一系列操作&#xff0c;而无需立即运行它们。相反&#xff0c;这些操作被保存为计算图&#xff0c;只在必要…

常见CMS漏洞(wordpress,DedeCms,ASPCMS,PHPMyAdmin)

练习一:wordpress漏洞测试 1.上传包含木马的主题 安装网站 登陆网站 上传主题处测试漏洞注入 在上传主题模板压缩包中写入一句话木马 网站上传含有木马的zip压缩包 上传成功 wordpress主题目录 wp-content/themes 访问上传木马测试 2.修改主题的配置文件为含有木马的文件 练习…

【Java数据结构】LinkedList与链表

认识LinkedList LinkedList就是一个链表&#xff0c;它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来&#xff0c;所以不需要数组。LinkedList也是以泛型的方法实现的&#xff0c;所以使用这个类都需要实例化对象。 链表分为很多种&#xff0c;比…

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…

【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读

上一篇文章学会了stdin任意地址写【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写-CSDN博客 本篇关注stdout利用手法&#xff0c;和上篇提及的手法有着异曲同工之妙 文章目录 前言 一、_IO_2_1_stdout_输出链&#xff0c;及利用思路 &#xff08;一&#xff09;_IO_2_1_std…

一网多平面

“一网多平面”是一种网络架构概念&#xff0c;具体指的是在一张物理网络之上&#xff0c;逻辑划分出“1N”个平面。以下是对“一网多平面”的详细解释&#xff1a; 定义与构成 01一网多平面 指的是在统一的物理网络基础设施上&#xff0c;通过逻辑划分形成多个独立的网络平面…

设计模式之状态模式:自动售货机的喜怒哀乐

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 一、状态模式概述 \quad 在我们的日常生活中&#xff0c;很多事物都具有不同的状态。比如我们经常使用的自动售货机&#xff0c;它就具有多种状态…

信息系统管理工程第8章思维导图

软考信管第8章的思维导图也实在是太长了&#xff0c;制作的耗时远超过之前的预计。给你看看思维导图的全貌如下&#xff0c;看看你能够在手机上滚动多少个屏幕 当你看到这段文字的时候&#xff0c;证明你把思维导图从上到下看完了&#xff0c;的确很长吧&#xff0c;第8章的教程…

Excel无法插入新单元格怎么办?有解决方法吗?

在使用Excel时&#xff0c;有时会遇到无法插入新单元格的困扰。这可能是由于多种原因导致的&#xff0c;比如单元格被保护、冻结窗格、合并单元格等。本文将详细介绍3种可能的解决方案&#xff0c;帮助你顺利插入新单元格。 一、消冻结窗格 冻结窗格功能有助于在滚动工作表时保…

深度学习笔记(12)——深度学习概论

深度学习概论 深度学习关系&#xff1a; 为什么机器人有一部分不在人工智能里面&#xff1a;机器人技术是一个跨学科的领域&#xff0c;它结合了机械工程、电子工程、计算机科学以及人工智能&#xff08;AI&#xff09;等多个领域的知识。 并不是所有的机器人都依赖于人工智能…

HEIC 是什么图片格式?如何把 iPhone 中的 HEIC 转为 JPG?

在 iPhone 拍摄照片时&#xff0c;默认的图片格式为 HEIC。虽然 HEIC 格式具有高压缩比、高画质等优点&#xff0c;但在某些设备或软件上可能存在兼容性问题。因此&#xff0c;将 HEIC 格式转换为更为通用的 JPG 格式就显得很有必要。本教程将介绍如何使用简鹿格式工厂&#xf…

flask后端开发(11):User模型创建+注册页面模板渲染

目录 一、数据库创建和配置信息1.新建数据库2.数据库配置信息3.User表4.ORM迁移 二、注册页面模板渲染1.导入静态文件2.蓝图注册路由 一、数据库创建和配置信息 1.新建数据库 终端中 CREATE DATABASE zhiliaooa DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2…

【Next.js】001-项目初始化

【Next.js】001-项目初始化 文章目录 【Next.js】001-项目初始化一、前言二、自动创建项目1、环境要求2、创建项目创建命令创建演示生成的项目目录如果你不使用 npx 命令 3、运行项目脚本说明在开发环境运行项目查看页面 4、示例代码说明创建项目查看示例项目创建项目命令创建过…