HTML新春烟花

系列文章

序号目录
1HTML满屏跳动的爱心(可写字)
2HTML五彩缤纷的爱心
3HTML满屏漂浮爱心
4HTML情人节快乐
5HTML蓝色爱心射线
6HTML跳动的爱心(简易版)
7HTML粒子爱心
8HTML蓝色动态爱心
9HTML跳动的爱心(双心版)
10HTML橙色动态粒子爱心
11HTML旋转爱心
12HTML爱情树
13HTML3D相册
14HTML旋转相册
15HTML基础烟花秀
16HTML炫酷烟花秀
17HTML粉色烟花秀
18HTML新春烟花
19HTML跨年烟花
20HTML音乐圣诞树
21HTML大雪纷飞
22HTML想见你
23HTML元素周期表
24HTML飞舞的花瓣
25HTML星空特效
26HTML黑客帝国字母雨
27HTML哆啦A梦
28HTML流星雨
29HTML沙漏爱心
30HTML爱心字母雨
31HTML爱心流星雨
32HTML生日蛋糕
33HTML3D旋转相册
34HTML流光爱心
35HTML满屏飘字
36HTML飞舞爱心
37HTML星空圣诞树
38HTML礼物圣诞树
39HTML粉色爱心

目录

系列文章

写在前面

技术需求

完整代码

下载代码

代码分析

1. HTML 基础结构

2. 引入外部脚本与样式

2.1 引入gameCanvas-4.0.js与script.js

2.2 引入 Live2D 动效

2.3 引入图片放大功能

2.4 引入鼠标特效

2.5 音乐播放器

2.6 随机线条特效

3. 雪花特效

4. 整体设计与效果

4.1 页面背景与气氛

4.2 技术实现

5. 总结

写在后面


 

写在前面

HTML语言实现新春烟花动画的完整代码,可以用浏览器直接运行。

技术需求

  1. HTML5

    • 使用了<canvas>标签用于绘制动态效果(如随机线条、雪花飘落等)。
    • 基本的HTML结构,定义了页面的头部和主体内容。
  2. CSS3

    • 用于设置样式,特别是背景和元素布局。
    • position: fixed; left: 0px; top: 0px; z-index: 2147483647; pointer-events: none;等样式用于确保画布元素始终显示在最前面,并防止其与用户交互。
  3. JavaScript

    • DOM操作:通过JavaScript操作页面元素,控制特效的生成和行为。
    • 动画效果:使用requestAnimationFramesetInterval等方法实现高效的动画效果,如随机线条的绘制和雪花的飘落。
    • 事件监听:监听鼠标事件(如点击、移动等),为用户提供动态反馈和互动体验。
  4. 外部库

    • jQuery:简化DOM操作、动画实现以及事件处理。用于雪花特效和图片放大效果。
    • Bootstrap:提供了部分样式支持,尤其是在布局和交互方面(如使用transition.js实现元素的平滑过渡)。
    • APlayer:用于实现背景音乐播放,提供了易于使用的音乐播放器界面和控制功能。
    • Meting.js:通过<meting-js>标签从网易云音乐加载音乐播放列表,结合APlayer实现音乐的流式播放。
  5. Live2D

    • 引入外部的Live2D库,用于加载和渲染动态2D角色模型(如人物表情和动作等),增加页面的互动性和趣味性。
  6. Canvas技术

    • 通过<canvas>元素和2D上下文API绘制图形。多个动态效果,如随机生成的线条、雪花飘落等,均是通过Canvas进行绘制和动画处理的。
  7. 外部CDN服务

    • 引用了多个CDN资源,如APlayerMeting.jsjQueryBootstrap等,简化了开发过程,并提高了页面加载速度。

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <title>新年快乐</title>
</head>

<body>
  <script src="js/gameCanvas-4.0.js"></script>
  <script src="js/script.js"></script>
  <!--live2d-->
  <script src="https://blog-static.cnblogs.com/files/zouwangblog/autoload.js"></script>
  <!--live2dend-->

  <!--放大图片-->
  <link rel="stylesheet" type="text/css" href="https://blog-static.cnblogs.com/files/zouwangblog/zoom.css" />
  <script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"></script>
  <script src="https://cdn.bootcss.com/bootstrap/3.2.0/js/transition.js"></script>
  <script src="https://blog-static.cnblogs.com/files/zouwangblog/zoom.js"></script>
  <script type="text/javascript">
    $("#cnblogs_post_body img").attr("data-action", "zoom");
  </script>
  <!--放大图片end-->

  <!--鼠标特效-->
  <script src="https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js"></script>
  <canvas width="1777" height="841" style="
        position: fixed;
        left: 0px;
        top: 0px;
        z-index: 2147483647;
        pointer-events: none;
      "></canvas>
  <!--鼠标特效 end-->

  <!-- require APlayer -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css" />
  <script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
  <!-- require MetingJS -->
  <script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>
  <meting-js id="2829883282" lrc-type="0" server="netease" order="random" type="playlist" fixed="true" autoplay="false"
    list-olded="true">
  </meting-js>

  <!-- 随机线条 -->
  <script>
    !(function () {
      function n(n, e, t) {
        return n.getAttribute(e) || t;
      }
      function e(n) {
        return document.getElementsByTagName(n);
      }
      function t() {
        var t = e("script"),
          o = t.length,
          i = t[o - 1];
        return {
          l: o,
          z: n(i, "zIndex", -1),
          o: n(i, "opacity", 0.6),
          c: n(i, "color", "148,0,211"),
          n: n(i, "count", 99),
        };
      }
      function o() {
        (a = m.width =
          window.innerWidth ||
          document.documentElement.clientWidth ||
          document.body.clientWidth),
          (c = m.height =
            window.innerHeight ||
            document.documentElement.clientHeight ||
            document.body.clientHeight);
      }
      function i() {
        r.clearRect(0, 0, a, c);
        var n, e, t, o, m, l;
        s.forEach(function (i, x) {
          for (
            i.x += i.xa,
            i.y += i.ya,
            i.xa *= i.x > a || i.x < 0 ? -1 : 1,
            i.ya *= i.y > c || i.y < 0 ? -1 : 1,
            r.fillRect(i.x - 0.5, i.y - 0.5, 1, 1),
            e = x + 1;
            e < u.length;
            e++
          )
            (n = u[e]),
              null !== n.x &&
              null !== n.y &&
              ((o = i.x - n.x),
                (m = i.y - n.y),
                (l = o * o + m * m),
                l < n.max &&
                (n === y &&
                  l >= n.max / 2 &&
                  ((i.x -= 0.03 * o), (i.y -= 0.03 * m)),
                  (t = (n.max - l) / n.max),
                  r.beginPath(),
                  (r.lineWidth = t / 2),
                  (r.strokeStyle = "rgba(" + d.c + "," + (t + 0.2) + ")"),
                  r.moveTo(i.x, i.y),
                  r.lineTo(n.x, n.y),
                  r.stroke()));
        }),
          x(i);
      }
      var a,
        c,
        u,
        m = document.createElement("canvas"),
        d = t(),
        l = "c_n" + d.l,
        r = m.getContext("2d"),
        x =
          window.requestAnimationFrame ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame ||
          window.oRequestAnimationFrame ||
          window.msRequestAnimationFrame ||
          function (n) {
            window.setTimeout(n, 1e3 / 45);
          },
        w = Math.random,
        y = { x: null, y: null, max: 2e4 };
      (m.id = l),
        (m.style.cssText =
          "position:fixed;top:0;left:0;z-index:" + d.z + ";opacity:" + d.o),
        e("body")[0].appendChild(m),
        o(),
        (window.onresize = o),
        (window.onmousemove = function (n) {
          (n = n || window.event), (y.x = n.clientX), (y.y = n.clientY);
        }),
        (window.onmouseout = function () {
          (y.x = null), (y.y = null);
        });
      for (var s = [], f = 0; d.n > f; f++) {
        var h = w() * a,
          g = w() * c,
          v = 2 * w() - 1,
          p = 2 * w() - 1;
        s.push({ x: h, y: g, xa: v, ya: p, max: 6e3 });
      }
      (u = s.concat([y])),
        setTimeout(function () {
          i();
        }, 100);
    })();
  </script>

  <!-- 雪花特效 -->
  <script type="text/javascript">
    (function ($) {
      $.fn.snow = function (options) {
        var $flake = $('<div id="snowbox" />')
          .css({ position: "absolute", "z-index": "9999", top: "-50px" })
          .html("❄"),
          documentHeight = $(document).height(),
          documentWidth = $(document).width(),
          defaults = {
            minSize: 10,
            maxSize: 20,
            newOn: 1000,
            flakeColor:
              "#FFFFFF",
          },
          options = $.extend({}, defaults, options);
        var interval = setInterval(function () {
          var startPositionLeft = Math.random() * documentWidth - 100,
            startOpacity = 0.5 + Math.random(),
            sizeFlake = options.minSize + Math.random() * options.maxSize,
            endPositionTop = documentHeight - 200,
            endPositionLeft = startPositionLeft - 500 + Math.random() * 500,
            durationFall = documentHeight * 10 + Math.random() * 5000;
          $flake
            .clone()
            .appendTo("body")
            .css({
              left: startPositionLeft,
              opacity: startOpacity,
              "font-size": sizeFlake,
              color: options.flakeColor,
            })
            .animate(
              {
                top: endPositionTop,
                left: endPositionLeft,
                opacity: 0.2,
              },
              durationFall,
              "linear",
              function () {
                $(this).remove();
              }
            );
        }, options.newOn);
      };
    })(jQuery);
    $(function () {
      $.fn.snow({
        minSize: 5 /* 定义雪花最小尺寸 */,
        maxSize: 80 /* 定义雪花最大尺寸 */,
        newOn: 200 /* 定义密集程度,数字越小越密集 */,
      });
    });
  </script>
</body>

</html>

代码分析

这段HTML代码主要实现了一个动态且富有节日气氛的页面,包含了多个前端特效,如鼠标点击特效、雪花飘落特效、背景音乐播放器、以及图片放大特效。页面的整体效果适用于节庆活动或祝福场合。以下将详细分析各部分代码的功能和实现方式。

1. HTML 基础结构

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>新年快乐</title>
</head>
<body>
  ...
</body>
</html>

这一部分定义了HTML文档的基础结构:

  • <!DOCTYPE html>:声明文档类型为HTML5。
  • <html lang="en">:指定文档的语言为英语。
  • <meta charset="UTF-8" />:设置字符编码为UTF-8,确保支持多语言字符集。
  • <title>新年快乐</title>:为页面设置了标题,显示为“新年快乐”。

2. 引入外部脚本与样式

页面包含了多个外部脚本和样式的引用,这些脚本和样式实现了不同的功能和特效。

2.1 引入gameCanvas-4.0.jsscript.js

<script src="js/gameCanvas-4.0.js"></script>
<script src="js/script.js"></script>

这两行脚本引入了gameCanvas-4.0.jsscript.js,虽然代码中没有显示这两个文件的具体内容,但根据命名可以推测,它们可能涉及到一个游戏或动态画布的实现,提供画布绘图、动画等功能。

2.2 引入 Live2D 动效

<script src="https://blog-static.cnblogs.com/files/zouwangblog/autoload.js"></script>

这段代码引入了autoload.js,这是一个外部库,用于加载Live2D模型。Live2D是一个可以在网页上显示2D角色模型并使其动起来的技术,通常用于实现角色动画效果,如表情、动作等。这个特效一般用于增强用户互动感或提升页面的动态效果。

2.3 引入图片放大功能

<link rel="stylesheet" type="text/css" href="https://blog-static.cnblogs.com/files/zouwangblog/zoom.css" />
<script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.2.0/js/transition.js"></script>
<script src="https://blog-static.cnblogs.com/files/zouwangblog/zoom.js"></script>

这一部分代码引入了图片放大的CSS和JavaScript库。通过引用zoom.csszoom.js,以及jQuery库,它为页面中的图片添加了放大查看的功能。具体实现是:当用户点击图片时,图片会放大并显示在页面的中心,提升了用户体验。data-action="zoom"属性被设置在图片元素上,表示这些图片可以被放大。

2.4 引入鼠标特效

<script src="https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js"></script>
<canvas width="1777" height="841" style="position: fixed; left: 0px; top: 0px; z-index: 2147483647; pointer-events: none;"></canvas>

mouse-click.js脚本通过监听用户的鼠标点击事件,生成动态的点击效果,常用于提升页面的互动性。这些动态效果会显示在画布<canvas>元素上。<canvas>元素的样式设置使得它始终显示在页面的最上层,且不与页面其他元素交互(pointer-events: none)。

2.5 音乐播放器

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css" />
<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>
<meting-js id="2829883282" lrc-type="0" server="netease" order="random" type="playlist" fixed="true" autoplay="false" list-olded="true">
</meting-js>

这部分代码实现了页面背景音乐播放功能。APlayer是一个流行的音频播放器,Meting.js是一个音频API,用于播放来自网易云音乐等服务的音乐。<meting-js>标签配置了一个播放列表,指定了网易云音乐作为音源服务器,并设置了一些播放器参数,如autoplay(是否自动播放)和order(播放顺序)。通过这些配置,页面可以根据需求自动播放背景音乐。

2.6 随机线条特效

<script>
  !(function () {
    function n(n, e, t) {
      return n.getAttribute(e) || t;
    }
    ...
  })();
</script>

这段代码实现了一个动态的随机线条效果。通过在浏览器中绘制随机生成的线条,并使它们根据特定规则运动,创造出一种星空或者流动的视觉效果。<canvas>元素被用来绘制这些线条,requestAnimationFrame用于高效地进行动画渲染。线条的运动方向和位置会随着页面窗口的大小变化而调整,确保在不同屏幕上都有良好的效果。

3. 雪花特效

<script type="text/javascript">
  (function ($) {
    $.fn.snow = function (options) {
      ...
    };
  })(jQuery);
  $(function () {
    $.fn.snow({
      minSize: 5,
      maxSize: 80,
      newOn: 200,
    });
  });
</script>

这一段实现了雪花飘落的效果。通过使用jQuery库,创建了一个插件$.fn.snow,该插件可以在页面中生成不同大小、不同速度的雪花。雪花的位置、大小和透明度都由随机数控制,使得每次加载页面时雪花效果都具有一定的随机性。setInterval函数用于定期生成雪花,animate函数则控制雪花从顶部飘落到页面底部的动画效果。

4. 整体设计与效果

4.1 页面背景与气氛

这段代码使用了多种动态特效来增强页面的节日气氛。背景音乐的播放、雪花的飘落以及鼠标点击特效等都增加了页面的互动性和趣味性。结合“新年快乐”这一主题,页面可以用于新年祝福、节庆活动等场合,通过这些特效营造出一种欢庆和喜庆的氛围。

4.2 技术实现

  • Canvas技术:多个特效都使用了<canvas>元素来绘制图形(如随机线条、雪花特效等),通过JavaScript动态控制画布上的图形内容,达到了动画效果。
  • jQuery库:许多特效(如图片放大、雪花飘落等)都依赖于jQuery库,它简化了DOM操作和动画实现。
  • 外部库:如APlayerMeting.js提供了方便的音乐播放功能,Live2D技术则提供了二维动画效果,使得页面更加生动和富有动感。

5. 总结

整体而言,这段代码通过多个前端特效和技术的结合,创造了一个互动性强、视觉效果丰富的页面。无论是雪花飘落、鼠标点击特效,还是背景音乐播放,都能够增强用户的体验感,营造出温馨、欢乐的氛围。它适用于节庆活动、祝福页面或互动式展示,能够吸引用户的注意力并提供愉悦的浏览体验。

写在后面

我是一只有趣的兔子,感谢你的喜欢。

 

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

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

相关文章

(回溯分割)leetcode93 复原IP地址

#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是&#xff1a;n个字符&#xff0c;递推n1后&#xff08;叶子节点&#xff…

关于ARM和汇编语言

一图流 ARM 计算机组成 输入设备 输出设备 存储设备 运算器 控制器 处理器读取内存程序执行的过程 取指阶段&#xff1a;控制器器通过地址总线向存储器发送想要获取的指令的地址编号&#xff0c;存储器将指定的指令发送给处理器 译码阶段&#xff1a;控制器对指令进行分…

个人学习 - 什么是Vim?

观我往旧&#xff0c;同我仰春 - 2025.1.10 声明 仅作为个人学习使用&#xff0c;仅供参考 本文所有解释参考笔者个人理解&#xff0c;最终目的是服务于自我学习&#xff0c; 如果你需要了解官方更规范的解释&#xff0c;请自行查阅 Vim 是什么 Vim 是一个强大的 文本编辑器…

python学习笔记2-简单数据类型

不同类型的变量可以进⾏的运算是不同的&#xff0c;所以必须理解变量的类型&#xff0c;python中数据类型可以分为&#xff1a; Number&#xff08;数值&#xff09; 整型&#xff08;int&#xff09; python3中只有int⼀种&#xff0c;可以表⽰整数&#xff0c;例如&#xf…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户&#xff0c;包括以下功能&#xff1a; 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…

Python的进程和线程

ref 接受几个设定: 进程是一家almost密不透风的公司,缅甸KK园区 线程里面工作的…人 进程**[园区]**内公共资源对于进程来说,可以共享. 别的园区[进程],一般不能和自己的园区共享人员资源,除非… 好的,现在再接受设定: 单个CPU在任一时刻只能执行单个线程&#xff0c;只有…

03垃圾回收篇(D4_彻底理解GC)

目录 一、浅析大促备战过程中出现的 fullGc&#xff0c;我们能做什么&#xff1f; 1. 什么是 JVM 的 GC? 2. 写代码的时候能做什么&#xff1f; 3. 测试能做啥 4. 知识小结 二、MinorGC、MajorGC、FullGC垃圾回收介绍 1. MinorGC &#xff08;新生代垃圾回收&#xff09…

软件测试 —— jmeter(2)

软件测试 —— jmeter&#xff08;2&#xff09; HTTP默认请求头&#xff08;元件&#xff09;元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组&#xff08;Stepping Thread Group&#xff09;参数解析总结 Response Times over TimeActive Thre…

分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法

分子动力学模拟&#xff08;Molecular Dynamics Simulation&#xff0c;简称MD&#xff09;是一种基于经典力学原理的计算物理方法&#xff0c;用于模拟原子和分子在给定时间内的运动和相互作用‌。以下是关于分子动力学模拟的一些核心术语和概念&#xff1a; ‌定义系统‌&am…

在 Windows 11 中为 SMB 3.x 文件共享协议提供 RDMA 支持

注&#xff1a;机翻&#xff0c;未校。 Enable SMB Direct in Windows 11 在 Windows 11 中启用 SMB Direct Provides RDMA support for the SMB 3.x file sharing protocol 为 SMB 3.x 文件共享协议提供 RDMA 支持 Vigneshwaran Vijayakumar November 3, 2024 Last Updat…

zabbix6.0安装及常用监控配置

文章目录 部署zabbix-serverzabbix监控节点部署解决zabbix中文乱码创建主机组创建模版配置主机与模版关联 监控boot分区监控网卡流量出网卡流量监控进入和出的总流量监控内存监控服务器端口用户自定应监控key值 (监控mysql查询数量)zabbix触发器监控cpu监控入网卡流量 邮件告警…

如何将使用unsloth微调的模型部署到ollama?

目录 一、将模型保存为gguf格式 二、下载llama.cpp 三、生成 llama-quantize 可执行文件 四、使用llama-quantize 五、训练模型 六、将模型部署到ollama 一、将模型保存为gguf格式 在你的训练代码 trainer.train() 之后添加&#xff1a; model.save_pretrained_gguf(&q…

【Hadoop面试题2025】

文章目录 简单题故障及相应的处理方法中等难度高难度小文件小文件的产生小文件问题的影响小文件治理方案推荐方案 冷文件冷文件的产生冷文件问题的影响冷文件治理方案推荐方案 简单题 一、基础概念类 什么是Hadoop&#xff1f; 答案&#xff1a;Hadoop是一个开源的分布式计算框…

2025.1.21——六、BUU XSS COURSE 1 XSS漏洞|XSS平台搭建

题目来源&#xff1a;buuctf BUU XSS COURSE 1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;输入框尝试一下 step 2&#xff1a;开始xss注入 step 3&#xff1a;搭建平台 step 4&#xff1a;利用管理员cookie访问地址 三、小结 二编&#…

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

IPhone16 Plus 设备详情

目录 产品宣传图内部图——前内部图——后设备详细信息 产品宣传图 内部图——前 内部图——后 设备详细信息 信息收集于HubWeb.cn

PyTorch入门 - 为什么选择PyTorch?

PyTorch入门 - 为什么选择PyTorch? Entry to PyTorch - Why PyTorch? by JacksonML $ pip install pytorch安装完毕后&#xff0c;可以使用以下命令&#xff0c;导入第三方库。 $ import pytorch

Jmeter 动态参数压力测试时间段预定接口

&#x1f3af; 本文档详细介绍了如何使用Apache JMeter进行压力测试&#xff0c;以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求&#xff0c;利用CSV文件动态配置时间段ID和用户token&#xff0c;确保了测试数据的真实性和有效性。文档中还…

字节跳动自研HTTP开源框架Hertz简介附使用示例

字节跳动自研 HTTP 框架 Hertz Hertz 是字节跳动自研的高性能 HTTP 框架&#xff0c;专为高并发、低延迟的场景设计。它基于 Go 语言开发&#xff0c;结合了字节跳动在微服务架构中的实践经验&#xff0c;旨在提供更高效的 HTTP 服务开发体验。 1. 背景介绍 随着字节跳动业务…

Spring Boot 自定义属性

Spring Boot 自定义属性 在 Spring Boot 应用程序中&#xff0c;application.yml 是一个常用的配置文件格式。它允许我们以层次化的方式组织配置信息&#xff0c;并且比传统的 .properties 文件更加直观。 本文将介绍如何在 Spring Boot 中读取和使用 application.yml 中的配…