2022跨年烟花代码HTML5夜景放烟花绽放动画效果

Posted A雄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022跨年烟花代码HTML5夜景放烟花绽放动画效果相关的知识,希望对你有一定的参考价值。

html5夜景放烟花绽放动画效果

html代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
	<style>
		bodymargin:0;padding:0;overflow: hidden;
		.citywidth:100%;position:fixed;bottom: 0px;z-index: 100;
		.city imgwidth: 100%;
	</style>
	<title>html5夜景放烟花绽放动画效果</title>
</head>
<body onselectstart = "return false">

<div style="height:700px;overflow:hidden;">

	<canvas id='cas' style="background-color:rgba(0,5,24,1);">浏览器不支持canvas</canvas>
	<div class="city"><img src="img/city.png" alt="" /></div>
	<img src="img/moon.png" alt="" id="moon" style="visibility: hidden;"/>
	<div style="display:none">
		<div class="shape">新年快乐</div>
		<div class="shape">合家幸福</div>
        <div class="shape">万事如意</div>
        <div class="shape">心想事成</div>
        <div class="shape">财源广进</div>
	</div>
	
</div>
	
	<script>
		var canvas = document.getElementById("cas");
		var ocas = document.createElement("canvas");
		var octx = ocas.getContext("2d");
		var ctx = canvas.getContext("2d");
		ocas.width = canvas.width = window.innerWidth;
		ocas.height = canvas.height = 700;
		var bigbooms = [];
	
		window.onload = function()
			initAnimate()
		

		function initAnimate()
			drawBg();

			lastTime = new Date();
			animate();
		

		var lastTime;
		function animate()
			ctx.save();
			ctx.fillStyle = "rgba(0,5,24,0.1)";
			ctx.fillRect(0,0,canvas.width,canvas.height);
			ctx.restore();


			var newTime = new Date();
            if(newTime-lastTime>500+(window.innerHeight-767)/2)
				var random = Math.random()*100>2?true:false;
				var x = getRandom(canvas.width/5 , canvas.width*4/5);
				var y = getRandom(50 , 200);
				if(random)
					var bigboom = new Boom(getRandom(canvas.width/3,canvas.width*2/3) ,2,"#FFF" , x:x , y:y);
					bigbooms.push(bigboom)
				
				else 
					var bigboom = new Boom(getRandom(canvas.width/3,canvas.width*2/3) ,2,"#FFF" , x:canvas.width/2 , y:200 , document.querySelectorAll(".shape")[parseInt(getRandom(0, document.querySelectorAll(".shape").length))]);
					bigbooms.push(bigboom)
				
				lastTime = newTime;
				console.log(bigbooms)
			

			stars.foreach(function()
				this.paint();
			)

			drawMoon();

			bigbooms.foreach(function(index)
				var that = this;
				if(!this.dead)
					this._move();
					this._drawLight();
				
				else
					this.booms.foreach(function(index)
						if(!this.dead) 
							this.moveTo(index);
						
						else if(index === that.booms.length-1)
							bigbooms[bigbooms.indexOf(that)] = null;
						
					)
				
			);
			
			raf(animate);
		

		function drawMoon()
			var moon = document.getElementById("moon");
			var centerX = canvas.width-200 , centerY = 100 , width = 80;
			if(moon.complete)
				ctx.drawImage(moon , centerX , centerY , width , width )
			
			else 
				moon.onload = function()
					ctx.drawImage(moon ,centerX , centerY , width , width)
				
			
			var index = 0;
			for(var i=0;i<10;i++)
				ctx.save();
				ctx.beginPath();
				ctx.arc(centerX+width/2 , centerY+width/2 , width/2+index , 0 , 2*Math.PI);
				ctx.fillStyle="rgba(240,219,120,0.005)";
				index+=2;
				ctx.fill();
				ctx.restore();
			
			
		

		Array.prototype.foreach = function(callback)
			for(var i=0;i<this.length;i++)
				if(this[i]!==null) callback.apply(this[i] , [i])
			
		

		var raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback)  window.setTimeout(callback, 1000 / 60); ;
 		
		canvas.onclick = function()
			var x = event.clientX;
			var y = event.clientY;
			var bigboom = new Boom(getRandom(canvas.width/3,canvas.width*2/3) ,2,"#FFF" , x:x , y:y);
			bigbooms.push(bigboom)
		

		// canvas.addEventLisener("touchstart" , function(event)
		// 	var touch = event.targetTouches[0];
		// 	var x = event.pageX;
		// 	var y = event.pageY;
		// 	var bigboom = new Boom(getRandom(canvas.width/3,canvas.width*2/3) ,2,"#FFF" , x:x , y:y);
		// 	bigbooms.push(bigboom)
		// )

		var Boom = function(x,r,c,boomArea,shape)
			this.booms = [];
			this.x = x;
			this.y = (canvas.height+r);
			this.r = r;
			this.c = c;
			this.shape = shape || false;
			this.boomArea = boomArea;
			this.theta = 0;
			this.dead = false;
			this.ba = parseInt(getRandom(80 , 200));
		
		Boom.prototype = 
			_paint:function()
				ctx.save();
				ctx.beginPath();
				ctx.arc(this.x,this.y,this.r,0,2*Math.PI);
				ctx.fillStyle = this.c;
				ctx.fill();
				ctx.restore();
			,
			_move:function()
				var dx = this.boomArea.x - this.x , dy = this.boomArea.y - this.y;
				this.x = this.x+dx*0.01;
				this.y = this.y+dy*0.01;

				if(Math.abs(dx)<=this.ba && Math.abs(dy)<=this.ba)
					if(this.shape)
						this._shapBoom();
					
					else this._boom();
					this.dead = true;
				
				else 
					this._paint();
				
			,
			_drawLight:function()
				ctx.save();
				ctx.fillStyle = "rgba(255,228,150,0.3)";
				ctx.beginPath();
				ctx.arc(this.x , this.y , this.r+3*Math.random()+1 , 0 , 2*Math.PI);
				ctx.fill();
				ctx.restore();
			,
			_boom:function()
				var fragNum = getRandom(30 , 200);
				var style = getRandom(0,10)>=5? 1 : 2;
				var color;
				if(style===1)
					color = 
						a:parseInt(getRandom(128,255)),
						b:parseInt(getRandom(128,255)),
						c:parseInt(getRandom(128,255))
					
				

				var fanwei = parseInt(getRandom(300, 400));
				for(var i=0;i<fragNum;i++)
					if(style===2)
						color = 
							a:parseInt(getRandom(128,255)),
							b:parseInt(getRandom(128,255)),
							c:parseInt(getRandom(128,255))
						
					
					var a = getRandom(-Math.PI, Math.PI);
					var x = getRandom(0, fanwei) * Math.cos(a) + this.x;
					var y = getRandom(0, fanwei) * Math.sin(a) + this.y; 
					var radius = getRandom(0 , 2)
					var frag = new Frag(this.x , this.y , radius , color , x , y );
					this.booms.push(frag);
				
			,
			_shapBoom:function()
				var that = this;
				putValue(ocas , octx , this.shape , 5, function(dots)
					var dx = canvas.width/2-that.x;
					var dy = canvas.height/2-that.y;
					for(var i=0;i<dots.length;i++)
						color = a:dots[i].a,b:dots[i].b,c:dots[i].c
						var x = dots[i].x;
						var y = dots[i]以上是关于2022跨年烟花代码HTML5夜景放烟花绽放动画效果的主要内容,如果未能解决你的问题,请参考以下文章

跨年烟花代码合集含动态展示效果及网盘代码下载

HTML2023跨年烟花代码

除夕最炫烟花代码—— HTML+JQuery实现2022跨年烟花特效

2022跨年烟花代码|用Python送你一场跨年烟花秀

2022跨年烟花代码|用Python送你一场跨年烟花秀

2022跨年烟花代码|用Python送你一场跨年烟花秀