南京做网站dmooo/百度一下首页
话不多说直接上代码
注意:背景图路径是picture/star.jpg,自己在同级目录先创键picture目录再下载一张图片命名为star.jpg
HTML:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Fireworks Animation</title><link rel="stylesheet" href="style.css" /></head><body><canvas id="fireworksCanvas"></canvas><script src="script.js"></script></body>
</html>
JS:
// 获取canvas元素const canvas = document.getElementById('fireworksCanvas');const ctx = canvas.getContext('2d');// 设置canvas宽度和高度为窗口宽度和高度canvas.width = window.innerWidth;canvas.height = window.innerHeight;let fireworks = [];// 创建烟花类class Firework {constructor() {this.x = Math.random() * canvas.width; // 随机生成烟花的起始x坐标this.y = canvas.height; // 烟花起始y坐标为画布底部this.radius = 2; // 烟花半径this.speed = 7; // 烟花上升速度this.color = 'white'; // 烟花颜色this.exploded = false; // 烟花是否已经爆炸this.particles = []; // 烟花爆炸后的粒子数组this.explosionHeight = Math.random() * (canvas.height * 0.4) + (canvas.height * 0.1); // 生成随机的爆炸高度this.initialAlpha = 1; // 初始透明度this.currentAlpha = this.initialAlpha; // 当前透明度}update() {if (!this.exploded) {this.y -= this.speed; // 烟花向上运动// 逐渐减少烟花的透明度this.currentAlpha -= 0.005;if (this.currentAlpha < 0) {this.currentAlpha = 0;}if (this.y <= this.explosionHeight) {this.explode();}} else {this.particles.forEach((particle, index) => {particle.update(); // 更新粒子的运动状态if (particle.alpha <= 0) {this.particles.splice(index, 1);}});}}draw() {ctx.beginPath(); // 开始绘制路径ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2); // 绘制一个以(x, y)为中心,半径为radius的圆ctx.fillStyle = this.color; // 设置填充颜色为烟花的颜色ctx.globalAlpha = this.currentAlpha; // 使用当前透明度ctx.fill(); // 填充圆ctx.closePath(); // 结束绘制路径if (this.exploded) {this.particles.forEach(particle => {particle.draw(); // 绘制每个粒子});}}explode() {this.exploded = true; // 设置烟花为已经爆炸状态for (let i = 0; i < 100; i++) {let particle = new Particle(this.x, this.y); // 创建一个新的粒子,位置为烟花的位置this.particles.push(particle); // 将新创建的粒子添加到烟花的粒子数组中}}}// 创建粒子类class Particle {constructor(x, y) { // 粒子类的构造函数,接收x和y坐标作为参数this.x = x; // 设置粒子的x坐标this.y = y; // 设置粒子的y坐标this.radius = 2; // 设置粒子的半径this.speedX = Math.random() * 5 - 2; // 随机生成粒子在x轴上的速度this.speedY = Math.random() * 5 - 2; // 随机生成粒子在y轴上的速度this.color = `hsl(${Math.random() * 360}, 100%, 50%)`; // 随机生成粒子的颜色this.alpha = 1.2; // 设置粒子的透明度为1.2this.fade = Math.random() * 0.02 + 0.01; // 随机生成粒子透明度的减少速度}update() { // 更新粒子的位置和透明度this.x += this.speedX; // 更新粒子的x坐标this.y += this.speedY; // 更新粒子的y坐标this.alpha -= this.fade; // 减少粒子的透明度}draw() { // 绘制粒子ctx.beginPath(); // 开始绘制路径ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2); // 绘制一个以(x, y)为中心,半径为radius的圆ctx.fillStyle = this.color; // 设置填充颜色为粒子的颜色ctx.globalAlpha = this.alpha; // 设置全局透明度为粒子的透明度ctx.fill(); // 填充圆ctx.closePath(); // 结束绘制路径}}function animate() { // 动画函数,更新画布内容并绘制烟花和粒子ctx.fillStyle = 'rgba(0, 0, 0, 0.1)'; // 设置画布背景颜色及透明度ctx.fillRect(0, 0, canvas.width, canvas.height); // 填充矩形覆盖画布fireworks.forEach((firework, index) => { // 遍历烟花数组firework.update(); // 更新烟花的位置和状态firework.draw(); // 绘制烟花及其粒子if (firework.exploded && firework.particles.length === 0) { // 如果烟花已经爆炸且没有粒子了fireworks.splice(index, 1); // 从烟花数组中移除该烟花}});requestAnimationFrame(animate); // 递归调用自身,实现连续动画效果}function init() { // 初始化函数setInterval(() => { // 每隔2秒执行一次let firework = new Firework(); // 创建一个新的烟花对象fireworks.push(firework); // 将新创建的烟花对象添加到烟花数组中}, 100);//每次循环的时间不能太长animate(); // 调用动画函数开始动画}init();
CSS:
body {margin: 0;padding: 0;overflow: hidden;background: url('picture/star.jpg') no-repeat center center fixed;background-size: cover;
}
canvas {display: block;margin: auto;position: absolute;top: 0;left: 0;right: 0;bottom: 0;opacity: 0.5; /* 设置画布的透明度为0.5 */
}
代码可以直接用。设计思路如下:
1.设计了烟花类,粒子类
2.烟花从上升开始,直到爆炸,爆炸点创建100个粒子对象,粒子用来模拟烟花爆炸后散开的状态
3.烟花和粒子分别拥有初始透明度,经过随机的透明度衰减,达到完全透明,来模拟烟花和粒子的消失
相关文章:

【JS+H5+CSS实现烟花特效】
话不多说直接上代码 注意:背景图路径是picture/star.jpg,自己在同级目录先创键picture目录再下载一张图片命名为star.jpg HTML: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vi…...

uniapp小程序使用webview 嵌套 vue 项目
uniapp小程序使用webview 嵌套 vue 项目 小程序中发送 <web-view :src"urlSrc" message"handleMessage"></web-view>export default {data() {return {urlSrc: "",};},onLoad(options) {// 我需要的参数比较多 所以比较臃肿// 获取…...

命令模式在金融业务中的应用及其框架实现
引言 命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,并且支持请求的排队和撤销操作。在金融业务中,命令模式可以用于实现交易请求、撤销操作等功能。本文将介绍命令模式在金融业务中的使用,并探讨…...

WordPress的性能优化有哪些方法?
WordPress的性能优化方法主要包括以下几个方面: 1. 使用缓存插件:缓存插件可以降低服务器负载,提高网站加载速度。常用的缓存插件有WP Rocket、WP Fastest Cache和Cache Enabler等。 2. 代码压缩和整合:通过压缩JavaScript、CSS…...

【Python基础】代码如何打包成exe可执行文件
本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、安装PyInstaller三、使用PyInstaller打包四、验证打包是否成功五、总结 一、前言 本文介绍如何…...

Golang | Leetcode Golang题解之第227题基本计算器II
题目: 题解: func calculate(s string) (ans int) {stack : []int{}preSign : num : 0for i, ch : range s {isDigit : 0 < ch && ch < 9if isDigit {num num*10 int(ch-0)}if !isDigit && ch ! || i len(s)-1 {switch preS…...

云端美味:iCloud中食谱与餐饮计划的智能存储方案
云端美味:iCloud中食谱与餐饮计划的智能存储方案 在数字化生活管理中,我们的食谱和餐饮计划是日常饮食健康与乐趣的重要部分。iCloud提供了一个无缝的解决方案,让我们可以在所有设备上存储、同步和访问这些珍贵的信息。本文将详细介绍如何在…...

leetcode:1332. 删除回文子序列(python3解法)
难度:简单 给你一个字符串 s,它仅由字母 a 和 b 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符(字符串为空)的最小删除次数。 「子序列」定义:如果一个字符串可以通过删除原字…...

智慧交通的神经中枢:Transformer模型在智能交通系统中的应用
智慧交通的神经中枢:Transformer模型在智能交通系统中的应用 随着城市化进程的加快,交通拥堵、事故频发、环境污染等问题日益严重。智能交通系统(ITS)作为解决这些问题的关键技术之一,受到了广泛关注。Transformer模型…...

PCIe驱动开发(1)— 开发环境搭建
PCIe驱动开发(1)— 开发环境搭建 一、前言 二、Ubuntu安装 参考: VMware下Ubuntu18.04虚拟机的安装 三、QEMU安装 参考文章:QEMU搭建X86_64 Ubuntu虚拟系统环境 四、安装Ubuntu 下载地址:https://old-releases.ubuntu.com…...

YOLOv10改进 | Conv篇 | CVPR2024最新DynamicConv替换下采样(解决低FLOPs陷阱)
一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制,这个论文中介绍了一个名为ParameterNet的新型设计原则,它旨在在大规模视觉预训练模型中增加参数数量,同时尽量不增加浮点运算&#x…...

变革设计领域:Transformer模型在智能辅助设计中的革命性应用
变革设计领域:Transformer模型在智能辅助设计中的革命性应用 在人工智能技术的推动下,智能辅助设计(Intelligent Assisted Design, IAD)正逐渐成为现实。Transformer模型,以其卓越的处理序列数据的能力,为…...

Spring——配置说明
1. 别名 别名:如果添加了别名,也可以使用别名获取这个对象 <alias name"user" alias"user2"/> 2. Bean的配置 id:bean 的唯一标识符,也就是相当于我们学的对象名class:bean 对象所对应的…...

禁用华为小米?微软中国免费送iPhone15
微软中国将禁用华为和小米手机,要求员工必须使用iPhone。如果还没有iPhone,公司直接免费送你全新的iPhone 15! 、 这几天在微软热度最高的话题就是这个免费发iPhone,很多员工,收到公司的通知。因为,登录公司…...

nginx初理解
没有ngix时,有两台服务器,供访问 1. 现在有两台服务器上同样的路径下都放了一个, 都能通过ip加端口访问到页面 后端项目 (查看tomcat中的配置中的 server.xml,能找到项目路径) tomacat 也都有 两个…...

FreeCAD源码分析:属性系统
按照面向对象设计(Object-Oriented Design, OOD)的信条,OOD大体上包括两方面的内涵:一方面,需要将业务数据抽象成(树状/层状)数据对象,这就是所谓的数据对象模型(Data Object Model);另一方面就是职责的分摊与聚合&…...

C++入门 模仿mysql控制台输出表格
一、 说明 控制台输出表格,自适应宽度 二、 源码 #include <iostream> #include <map> #include <string> #include <vector>using namespace std;void printTable(vector<vector<string>> *pTableData) {int row pTableDa…...

SpringBoot新手快速入门系列教程五:基于JPA的一个Mysql简单读写例子
现在我们来做一个简单的读写Mysql的项目 1,先新建一个项目,我们叫它“HelloJPA”并且添加依赖 2,引入以下依赖: Spring Boot DevTools (可选,但推荐,用于开发时热部署)Lombok(可选,…...

开源大势所趋
一、开源项目的发展趋势 技术栈多样化与专业化:随着技术的不断进步,开源项目涵盖了从云计算、大数据、人工智能到区块链、物联网等各个领域,技术栈日益丰富和专业化。这种趋势使得开发者能够根据自己的需求选择最适合的技术工具,促…...

智能无人机飞行控制系统:基于STM32的设计与实现(内附资料)
摘要 智能无人机的飞行控制系统是确保无人机安全、高效运行的核心。本文将探讨基于STM32微控制器的智能无人机飞行控制系统的设计与实现,包括系统架构、关键组件选择、控制算法开发以及代码实现。 1. 引言 智能无人机在军事侦察、物流配送、环境监测等多个领域展…...

centos磁盘空间满了-问题解决
报错问题解释: CentOS系统在运行过程中可能会出现磁盘空间不足的错误。这通常发生在以下几种情况: 系统日志文件或临时文件过大导致磁盘空间不足。 安装了大量软件或文件而没有清理无用文件。 有可能是某个进程占用了大量磁盘空间。 问题解决方法&a…...

宝塔:如何开启面板ssl并更新过期ssl
1、登录宝塔面板 > 前往面板设置 > 最上方的安全设置 > 面板SSL > 面板SSL配置 打开后先查看自签证书的时间,如果时间是已经过期的,就前往这个目录,将该目录下所有文件都删掉 重新回到面板SSL配置的位置,打开后会看到…...

大白话讲解AI大模型
大白话讲解大模型 大模型的发展重要大模型发展时间线 大模型的简单原理-训练⼤模型是如何训练并应⽤到场景中的?如果训练私有化模型 模型:model 语料库:用于训练模型的数据 大模型的发展 详细信息来源:DataLearner 2022年11月底…...

pandas+pywin32操作excel办公自动化
import pandas as pd import re import win32com.client as win32 from win32com.client import constants import os import os.path as osp #读取表格 pathos.getcwd() fposp.join(path,fuck_demo.xlsx) dfpd.read_excel(fp,header1,usecols[序号,光缆段落名(A端…...

防火墙(ensp USG6000v)---安全策略 + 用户认证综合实验
一. 题目 1) 拓扑 2)要求 1. DMZ区内的服务器,办公区仅能在办公时间内(9:00 -- 18: 00)可以访问,生产区的设备全天可以访问 2.生产区不允许访问互联网,办公区和游客区允许访问互联网 3.办公区设备10.0.2.10不充许…...

Java使用POI导出后数字类型为常规类型,不能计算
今日日常撸码,甲方提出来excel导出后,数字类型那一列是常规类型,并不是数字,无法进行计算,如下图: 这里和导出的字段类型有关,我用的是POI进行excel的导出,需要在实体类上标注出需要…...

项目进度管理(5-1)常见的缓冲区监控方法
缓冲区监控是一种项目管理技术,主要用于关键链项目管理系统(Critical Chain Project Management, CCPM)中。它的核心理念是识别和管理项目中的不确定性和依赖性,以提高项目完成的可靠性。 缓冲区监控方法主要是针对项目进度计划执…...

构造函数语意学(The Semantics of Constructors)
1、“Default Constructor” 的构造操作 下面4种情况编译器会生成默认构造函数: 成员类对象带有默认构造函数父类带有默认构造函数带有虚表的类带有虚基类的类 1.1、 成员类对象带有默认构造函数 如果一个类没有任何构造函数,但它的一个成员对象带有…...

香橙派5plus上跑云手机方案二 waydroid
前言 上篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)说了怎么跑带GPU加速的redroid方案,这篇说下怎么在香橙派下使用Waydroid。 温馨提示 虽然能运行,但是体验下来只能用软件加速,无法使用GPU加速,所有会很卡。而且…...

600Kg大载重起飞重量多旋翼无人机技术详解
600Kg大载重起飞重量的多旋翼无人机是一种高性能的无人驾驶旋翼飞行器,具有出色的载重能力和稳定的飞行特性。该无人机采用先进的飞行控制系统和高效的动力系统,能够满足各种复杂任务的需求,广泛应用于物资运输、应急救援、森林防火等领域。 …...