如何用html画出一个烟花?

本文详细介绍了如何通过HTML、CSS和JavaScript(配合jQuery)在网页上创建动态烟花效果,包括代码示例和关键步骤的解释。
摘要由CSDN通过智能技术生成

问题描述:如何用html画出一个烟花?

问题解答:

将下面代码复制到一个txt文件中,然后修改后缀txt→html,用浏览器打开就是烟花了。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <style>
  body: {
	padding: 0;
}

canvas {
	display: block;
}
  </style>
 </HEAD>

 <BODY>
 <canvas id="canvas"></canvas>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
  <script>
  $(function() {
	var canvas = $('#canvas')[0];
	canvas.width = $(window).width();
	canvas.height = $(window).height();
	var ctx = canvas.getContext('2d');
	
	// resize
	$(window).on('resize', function() {
		canvas.width = $(window).width();
		canvas.height = $(window).height();
		ctx.fillStyle = '#000';
		ctx.fillRect(0, 0, canvas.width, canvas.height);
	});

	// init
	ctx.fillStyle = '#000';
	ctx.fillRect(0, 0, canvas.width, canvas.height);
	// objects
	var listFire = [];
	var listFirework = [];
	var fireNumber = 10;
	var center = { x: canvas.width / 2, y: canvas.height / 2 };
	var range = 100;
	for (var i = 0; i < fireNumber; i++) {
		var fire = {
			x: Math.random() * range / 2 - range / 4 + center.x,
			y: Math.random() * range * 2 + canvas.height,
			size: Math.random() + 0.5,
			fill: '#fd1',
			vx: Math.random() - 0.5,
			vy: -(Math.random() + 4),
			ax: Math.random() * 0.02 - 0.01,
			far: Math.random() * range + (center.y - range)
		};
		fire.base = {
			x: fire.x,
			y: fire.y,
			vx: fire.vx
		};
		//
		listFire.push(fire);
	}

	function randColor() {
		var r = Math.floor(Math.random() * 256);
		var g = Math.floor(Math.random() * 256);
		var b = Math.floor(Math.random() * 256);
		var color = 'rgb($r, $g, $b)';
		color = color.replace('$r', r);
		color = color.replace('$g', g);
		color = color.replace('$b', b);
		return color;
	}

	(function loop() {
		requestAnimationFrame(loop);
		update();
		draw();
	})();

	function update() {
		for (var i = 0; i < listFire.length; i++) {
			var fire = listFire[i];
			//
			if (fire.y <= fire.far) {
				// case add firework
				var color = randColor();
				for (var i = 0; i < fireNumber * 5; i++) {
					var firework = {
						x: fire.x,
						y: fire.y,
						size: Math.random() + 1.5,
						fill: color,
						vx: Math.random() * 5 - 2.5,
						vy: Math.random() * -5 + 1.5,
						ay: 0.05,
						alpha: 1,
						life: Math.round(Math.random() * range / 2) + range / 2
					};
					firework.base = {
						life: firework.life,
						size: firework.size
					};
					listFirework.push(firework);
				}
				// reset
				fire.y = fire.base.y;
				fire.x = fire.base.x;
				fire.vx = fire.base.vx;
				fire.ax = Math.random() * 0.02 - 0.01;
			}
			//
			fire.x += fire.vx;
			fire.y += fire.vy;
			fire.vx += fire.ax;
		}

		for (var i = listFirework.length - 1; i >= 0; i--) {
			var firework = listFirework[i];
			if (firework) {
				firework.x += firework.vx;
				firework.y += firework.vy;
				firework.vy += firework.ay;
				firework.alpha = firework.life / firework.base.life;
				firework.size = firework.alpha * firework.base.size;
				firework.alpha = firework.alpha > 0.6 ? 1 : firework.alpha;
				//
				firework.life--;
				if (firework.life <= 0) {
					listFirework.splice(i, 1);
				}
			}
		}
	}

	function draw() {
		// clear
		ctx.globalCompositeOperation = 'source-over';
		ctx.globalAlpha = 0.18;
		ctx.fillStyle = '#000';
		ctx.fillRect(0, 0, canvas.width, canvas.height);

		// re-draw
		ctx.globalCompositeOperation = 'screen';
		ctx.globalAlpha = 1;
		for (var i = 0; i < listFire.length; i++) {
			var fire = listFire[i];
			ctx.beginPath();
			ctx.arc(fire.x, fire.y, fire.size, 0, Math.PI * 2);
			ctx.closePath();
			ctx.fillStyle = fire.fill;
			ctx.fill();
		}

		for (var i = 0; i < listFirework.length; i++) {
			var firework = listFirework[i];
			ctx.globalAlpha = firework.alpha;
			ctx.beginPath();
			ctx.arc(firework.x, firework.y, firework.size, 0, Math.PI * 2);
			ctx.closePath();
			ctx.fillStyle = firework.fill;
			ctx.fill();
		}
	}
})
  </script>
 </BODY>
</HTML>

效果如下:

HTML 是一种标记语言,用于创建网页结构和内容。它本身不能制作动画,但可以与 CSS 和 JavaScript 一起使用来创建动态效果。下面是一个HTML、CSS 和 JavaScript 制作的烟花动画示例: HTML 代码: ``` <!DOCTYPE html> <html> <head> <title>烟花动画</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="firework-container"></div> <script src="script.js"></script> </body> </html> ``` CSS 代码: ``` .firework-container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 500px; height: 500px; overflow: hidden; } ``` JavaScript 代码: ``` var container = document.querySelector('.firework-container'); var colors = ['#00bcd4', '#4caf50', '#ffeb3b', '#ff5722', '#e91e63', '#9c27b0']; var particles = []; function createParticle(x, y, color) { var particle = document.createElement('div'); particle.style.position = 'absolute'; particle.style.width = '10px'; particle.style.height = '10px'; particle.style.borderRadius = '50%'; particle.style.backgroundColor = color; particle.style.transform = 'translate(' + x + 'px, ' + y + 'px)'; container.appendChild(particle); particles.push(particle); } function explode(x, y) { for (var i = 0; i < 30; i++) { var angle = Math.random() * Math.PI * 2; var speed = Math.random() * 10 + 5; var color = colors[Math.floor(Math.random() * colors.length)]; var vx = Math.cos(angle) * speed; var vy = Math.sin(angle) * speed; createParticle(x, y, color); particles[i].vx = vx; particles[i].vy = vy; } } function update() { for (var i = 0; i < particles.length; i++) { particles[i].style.transform = 'translate(' + particles[i].vx + 'px, ' + particles[i].vy + 'px)'; particles[i].vx *= 0.95; particles[i].vy *= 0.95; if (Math.abs(particles[i].vx) < 0.1 && Math.abs(particles[i].vy) < 0.1) { container.removeChild(particles[i]); particles.splice(i, 1); i--; } } if (particles.length === 0) { container.removeEventListener('click', handleClick); } } function handleClick(e) { explode(e.clientX - container.offsetLeft, e.clientY - container.offsetTop); } container.addEventListener('click', handleClick); setInterval(update, 1000 / 60); ``` 这个示例展示了一个简单的烟花动画,点击页面中的任何位置都会触发一次烟花爆炸效果。JavaScript 代码使用了一些基本的 DOM 操作和数学计算,CSS 代码用于设置容器的样式。您可以根据自己的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值