HTML+CSS+JS制作炫酷【烟花特效】

news2024/9/22 17:24:44

文章目录

    • 制作炫酷烟花特效
    • 一、普通烟花(分散形)
      • HTML代码
      • CSS代码
      • JS代码
    • 二、圆形烟花
      • HTML代码
      • CSS代码
      • JS代码
    • 三、爱心形烟花
      • HTML代码
      • CSS代码
      • JS代码
    • 四、源码获取
      • 在线下载

制作炫酷烟花特效

💡本篇内容使用html+css+js制作鼠标点击出现烟花效果,分别介绍了分散型烟花,圆形烟花和爱心形烟花,爱心形烟花算法比较复杂,需要源码的小伙伴可以通过文章末尾链接下载。

一、普通烟花(分散形)

效果展示

请添加图片描述

HTML代码

引入js 文件

<script type="text/javascript" src="buffermove1.js"></script>

CSS代码

创建一个黑色背景

<style type="text/css">
		*{
			padding: 0px;margin: 0px;
		}

		body{
			background: #000;
			width: 100%;
			height:100%;
			overflow: hidden;
		}
	</style>

JS代码

<script type="text/javascript">
  //this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。
  function Fireworks(x,y){//x,y鼠标的位置
    this.x=x;
    this.y=y;
    var that=this;
    //1.创建烟花。
    this.ceratefirework=function(){
      this.firework=document.createElement('div');//整个构造函数内部都可以使用
      this.firework.style.cssText=`width:5px;height:5px;background:#fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;`;
      document.body.appendChild(this.firework);
      this.fireworkmove();
    };
    //2.烟花运动和消失
    this.fireworkmove=function(){
      buffermove(this.firework,{top:this.y},function(){
        document.body.removeChild(that.firework);//烟花消失,碎片产生
        that.fireworkfragment();
      });
    };
    //3.创建烟花的碎片
    this.fireworkfragment=function(){
      for(var i=0;i<this.ranNum(30,60);i++){
        this.fragment=document.createElement('div');
        this.fragment.style.cssText=`width:5px;height:5px;background:rgb(${this.ranNum(0,255)},${this.ranNum(0,255)},${this.ranNum(0,255)});position:absolute;left:${this.x}px;top:${this.y}px;`;
        document.body.appendChild(this.fragment);
        this.fireworkboom(this.fragment);//将当前创建的碎片传过去,方便运动和删除
      }
    }


    //4.碎片运动
    this.fireworkboom=function(obj){//obj:创建的碎片


      //设点速度(值不同,正负符号不同)
      var speedx=parseInt((Math.random()>0.5?'-':'')+this.ranNum(1,15));
      var speedy=parseInt((Math.random()>0.5?'-':'')+this.ranNum(1,15));


      //初始速度
      var initx=this.x;
      var inity=this.y;
      obj.timer=setInterval(function(){//一个盒子运动
        initx+=speedx;
        inity+=speedy;
        if(inity>=document.documentElement.clientHeight){
          clearInterval(obj.timer);
          document.body.removeChild(obj);
        }
        obj.style.left=initx+'px';
        obj.style.top=inity+'px';
      },20);

    }


    //随机方法
    this.ranNum=function (min,max){
      return Math.round(Math.random()*(max-min))+min;
    };
  }



  document.onclick=function(ev){
    var ev=ev||window.event;
    new Fireworks(ev.clientX,ev.clientY).ceratefirework();
  }
</script>

二、圆形烟花

效果展示
在这里插入图片描述

HTML代码

引入js 文件

<script type="text/javascript" src="buffermove1.js"></script>

CSS代码

创建一个黑色背景

<style type="text/css">
		*{
			padding: 0px;margin: 0px;
		}

		body{
			background: #000;
			width: 100%;
			height:100%;
			overflow: hidden;
		}
	</style>

JS代码

<script type="text/javascript">
		//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。
		function Fireworks(x,y){//x,y鼠标的位置
			this.x=x;
			this.y=y;
			var that=this;
			//1.创建烟花。
			this.ceratefirework=function(){
				this.firework=document.createElement('div');//整个构造函数内部都可以使用
				this.firework.style.cssText=`width:5px;height:5px;background:#fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;`;
				document.body.appendChild(this.firework);
				this.fireworkmove();
			};
			//2.烟花运动和消失
			this.fireworkmove=function(){
				var that=this;
				buffermove(this.firework,{top:this.y},function(){
					document.body.removeChild(that.firework);//烟花消失,碎片产生
					that.fireworkfragment();
				});
			};
			//3.创建烟花的碎片
			this.fireworkfragment=function(){
				var num=this.ranNum(30,60);//盒子的个数
				this.perRadio=2*Math.PI/num;//弧度
				for(var i=0;i<num;i++){
					this.fragment=document.createElement('div');
					this.fragment.style.cssText=`width:5px;height:5px;background:rgb(${this.ranNum(0,255)},${this.ranNum(0,255)},${this.ranNum(0,255)});position:absolute;left:${this.x}px;top:${this.y}px;`;
					document.body.appendChild(this.fragment);
					this.fireworkboom(this.fragment,i);//将当前创建的碎片传过去,方便运动和删除
				}
			}

			//4.碎片运动
			this.fireworkboom=function(obj,i){//obj:创建的碎片
				var r=10;
				obj.timer=setInterval(function(){//一个盒子运动
					r+=4;
					if(r>=200){
						clearInterval(obj.timer);
						document.body.removeChild(obj);
					}
					obj.style.left=that.x+Math.sin(that.perRadio*i)*r+'px';
					obj.style.top=that.y+Math.cos(that.perRadio*i)*r+'px';
				},20);
				
			}

			//随机方法
			this.ranNum=function (min,max){
				return Math.round(Math.random()*(max-min))+min;
			};
		}


		document.onclick=function(ev){
			var ev=ev||window.event;
			new Fireworks(ev.clientX,ev.clientY).ceratefirework();
		}
	</script>
	

三、爱心形烟花

效果展示
在这里插入图片描述

HTML代码

引入js 文件

<script type="text/javascript" src="buffermove1.js"></script>

CSS代码

创建一个黑色背景

<style type="text/css">
		*{
			padding: 0px;margin: 0px;
		}

		body{
			background: #000;
			width: 100%;
			height:100%;
			overflow: hidden;
		}
	</style>

JS代码

<script type="text/javascript">
		//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。
		function Fireworks(x,y){//x,y鼠标的位置
			this.x=x;
			this.y=y;
			var that=this;
			//1.创建烟花。
			this.ceratefirework=function(){
				this.firework=document.createElement('div');//整个构造函数内部都可以使用
				this.firework.style.cssText=`width:5px;height:5px;background:#fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;`;
				document.body.appendChild(this.firework);
				this.fireworkmove();
			};
			//2.烟花运动和消失
			this.fireworkmove=function(){
				buffermove(this.firework,{top:this.y},function(){
					document.body.removeChild(that.firework);//烟花消失,碎片产生
					that.fireworkfragment();
				});
			};
			//3.创建烟花的碎片
			this.fireworkfragment=function(){
				var num=this.ranNum(30,60);//盒子的个数
				this.perRadio=2*Math.PI/num;//弧度
				for(var i=0;i<num;i++){
					this.fragment=document.createElement('div');
					this.fragment.style.cssText=`width:5px;height:5px;background:rgb(${this.ranNum(0,255)},${this.ranNum(0,255)},${this.ranNum(0,255)});position:absolute;left:${this.x}px;top:${this.y}px;`;
					document.body.appendChild(this.fragment);
					this.fireworkboom(this.fragment,i);//将当前创建的碎片传过去,方便运动和删除
				}
			}


			
		    //x=16*Math.pow(sint,3);  //Math.sin(perRadio*i)
		    //y=13Cost-5*Cos2t-2*Cos3t-Cos4t
			//4.碎片运动
			this.fireworkboom=function(obj,i){//obj:创建的碎片
				var r=0.1;
				obj.timer=setInterval(function(){//一个盒子运动
					r+=0.4;
					if(r>=10){
						clearInterval(obj.timer);
						document.body.removeChild(obj);
					}
					obj.style.left=that.x+16*Math.pow(Math.sin(that.perRadio*i),3)*r+'px';
					obj.style.top=that.y-(13*Math.cos(that.perRadio*i)-5*Math.cos(2*that.perRadio*i)-2*Math.cos(3*that.perRadio*i)-Math.cos(4*that.perRadio*i))*r+'px';
				},20);
				
			}

			//随机方法
			this.ranNum=function (min,max){
				return Math.round(Math.random()*(max-min))+min;
			};
		}


		document.onclick=function(ev){
			var ev=ev||window.event;
			new Fireworks(ev.clientX,ev.clientY).ceratefirework();
		}
	</script>
	

四、源码获取

在线下载

资源链接:https://gitee.com/huang_weifu/JavaScript_demo.git
在这里插入图片描述

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

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

相关文章

python-测试代码

1. 测试函数get_name.pydef combination(first, last):将姓名组合在一起name first lastreturn name.title()hello_world.pyfrom get_name import combinationprint("Enter q to quit!") while True:first input(Please input your first name: )if first q:b…

理光Aficio MP C2500扫描到文件夹设置方法

首先在需要接收扫描文件的电脑上设置共享文件夹。 注&#xff1a; &#xff08;1&#xff09;文件夹的名字最好简单一点&#xff0c;比如&#xff1a;scan、123等等&#xff1b; &#xff08;2&#xff09;文件夹的共享权限最好能设置为最大&#xff08;WindowsXP、Windows200…

Future、CompletableFuture概述

1.同步和异步 &#xff08;1&#xff09;同步&#xff1a;需要等待结果返回&#xff0c;才能继续运行 &#xff08;2&#xff09;异步&#xff1a;不需要等待结果返回&#xff0c;就能继续运行 &#xff08;3&#xff09;异步设计&#xff1a;多线程可以让方法执行变为异步(比…

第四章必备前端基础知识-第二节3:CSS盒模型和浮动

文章目录一&#xff1a;盒模型&#xff08;1&#xff09;border&#xff08;2&#xff09;padding&#xff08;3&#xff09;margin二&#xff1a;flex布局一&#xff1a;盒模型 盒模型&#xff1a;在HTML中&#xff0c;每个标签&#xff08;或元素&#xff09;相当于是一个盒…

Mybatis和Jpa

这里写目录标题1.Mybatis1.1 JDBC的缺点1.2 Mybatis的整体架构1.3 入门案例1.3.1 问题:无法连接到数据库服务器1.4 动态代理实现Mapper1.5 mybatis-config.xml配置1.5.1 properties属性读取外部资源1.5.2 settings设置1.5.3 typeAliases1.5.4 typeHandlers&#xff08;类型处理…

【Substance Designer】基础操作和节点学习记录

写在前面 这个记录稍微有点杂&#xff0c;大概是庄懂的技术美术入门课(美术向)-直播录屏-第20课和一些基础操作的记录合集吧&#xff01; 补充 学习发现&#xff0c;基础的节点是需要学习和记录的&#xff0c;但是真正用起来还是要多用多练&#xff01;所以这种简单的记录节点…

YOLOv5/v7 引入 RepVGG 重参数化模块

本篇博文代码出自YOLOv5-lite &#xff0c;YOLOv5-lite的作者在CSDN的账号是 pogg_ &#xff0c;大家可以关注一下&#xff0c;这也是一位在开源项目上做了很多工作的博主。 RepVGG的原理和融合推导过程可以看我的这篇博文&#xff1a;RepVGG&#xff1a;让VGG风格的ConvNets再…

机制设计原理与应用(三)Screening

文章目录3 Screening3.1 为单个不可分割的项目定价3.1.1 对θ\thetaθ的假设3.1.2 问题描述3.1.3 特性3.2 为无限可分的项目定价3.2.1 对θ\thetaθ的假设3.2.3 特性3.2.4 收益最大化3.2.5 最优解决方案3 Screening Screening theory&#xff1a;机制设计理论可以被看作是其多…

Cadence PCB仿真使用Allegro PCB SI生成振铃ringing仿真报告及报告导读图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,生成报告3,报告导读4,总结1,概述 本文简单介绍使用Allegro PCB SI生成网络的振铃性能评估的报告的方法,及振铃ringing报告要点导读。 2,生成报告 第1步,选择需要生成报告的网络,然后…

第二章 ArcGIS数据和地理数据库

文章目录第一节 ArcGIS和4D数据基本知识1 4D数据介绍1.1 DLG1.2 DEM1.3 DOM1.4 DRG1.5 4D表现2 ArcGIS的数据和4D数据对应3 栅格数据3.1 查看帮助3.2 空间分辨率3.3 分辨率与比例尺换算3.4 栅格数据介绍——cellsize3.5 栅格数据波段3.6 栅格格式4 栅格数据改变分辨率5 转换栅格…

【 uniapp - 黑马优购 | 登录与支付(2)】如何实现三秒后跳转和微信支付

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;见文末 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;…

Ubuntu20.04+MAVROS+PX4+Gazebo安装教程

Ubuntu20.04MAVROSPX4Gazebo安装PX4步骤安装MAVROS安装QGCPX4仿真安装PX4步骤 从github上clone源码 git clone https://github.com/PX4/PX4-Autopilot.git --recursive进入PX4-Autopilot文件夹&#xff0c;继续下载未下载完的组件 cd PX4-Autopilot/ git submodule update -…

flowable使用 act_hi_xxx

HistoryService 流程历史信息 act_hi_procinst : 历史流程信息&#xff0c;&#xff0c;如果流程执行完了&#xff0c;end_time_ 和 duration不为null // 没有执行完的List<HistoricProcessInstance> list historyService.createHistoricProcessInstanceQuery().unfi…

uniapp封装并全局挂载request请求

前言 日常开发中,前端项目中需要调用服务端api完成页面渲染,uniapp提供的请求api:uni.request相对繁琐;另外服务端提供的不同api仅子路径不同,api域名以及根路径都是相同的,一旦接口api变更,需要更改地方就会很多.鉴于以上可以将uni.request进行封装,简化开发. 目前uniapp项…

MySQL(四):B+树索引、聚簇索引、二级索引、联合索引

目录一、B树索引1.1 在没有索引时进行查找记录1.2 索引方案1.3 InnoDB中的索引方案二、聚簇索引三、二级索引四、联合索引五、InnoDB中B树索引的注意事项5.1 根页面的位置不会改变5.2 内节点中目录项记录的唯一性5.3 一个页面至少容纳两条记录一、B树索引 数据库中的用来存储数…

MySQL进阶篇之索引1

02、索引 2.1、索引概述 1、介绍 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#…

Cepstral Analysis 倒谱分析

源过滤器分离 倒谱分析是另一种将声道滤波器响应与激励分开的方法&#xff08;如线性预测&#xff09; 它基于以下观察&#xff1a;语音信号的频谱是激励频谱和声道频率响应的乘积 可以使用log将乘法转换为加法&#xff0c;因此&#xff0c;“对数频谱”可以看作是对数激励频…

十七、Gtk4-Menu and action

Menu 用户经常使用菜单向计算机发出命令。它是这样的: 现在让我们分析一下上面的菜单。对象有两种类型。 “File”, “Edit”, “View”, “Cut”, “Copy”, “Paste” and “Select All”. 它们被称为“菜单项&#xff08;menu item&#xff09;”或简单地称为“item”。当…

字节青训前端笔记 | 前端调试

在程序员的世界中&#xff0c;BUG 一词相信同学们再熟悉不过了&#xff0c;本节课将围绕前端开发中所遇见的 BUG 出发&#xff0c;讲解作为一名合格的前端开发人员&#xff0c;你应该掌握哪些开发调试知识 Chorme DevTools Chorme DevTools 是 chorme内核为大家提供的高效的前…

gdb使用

gdb是一款UNIX及UNIX-like下的调试工具 gdb可用于调试用gcc编译的可执行文件&#xff0c;用gdb调试时gcc编译需要使用参数-g 本文是对于gdb在Linux下使用的基本命令的总结gdb调试视频演示&#xff0c;gdb调试基础指令&#xff0c;gdb调试其他命令&#xff0c;gdb常见错误说明 目…