纯js代码,制作炫酷烟花特效。快给你的朋友瞧瞧吧!

  首先我们来看看烟花最终实现的效果
在这里插入图片描述
是不是很有意思呢,接下来就来讲解实现烟花特效所需的步骤:

实现步骤:

首先我们将html与body填满整个屏幕

<style>
        html,body{
                padding: 0;
                margin: 0;
                width: 100%;
                height: 100%;
            }
    </style>

1.创建一个画布,设置宽高,并将画布添加到body中,调用getContext方法:

	var canvas = document.createElement("canvas");
	document.body.appendChild(canvas);
	var context = canvas.getContext('2d');
    //规定画布大小
	canvas.width = window.innerWidth;
	canvas.height = window.innerHeight;

2.创建一个方法,用于将画布填充成黑色

function clearCanvas() {
		context.fillStyle = '#000000';
		context.fillRect(0, 0, canvas.width, canvas.height);
	}
	clearCanvas();

3.创建烟火,里面有各种属性(速度,角度,大小,半径等)

var particles = [];//烟火
function createFireworks(sx, sy) {
		var count = 100;//烟火的个数
		for (var i = 0; i < count; i++) {
			var p = {};//烟火对象
			var angle = Math.floor(Math.random() * 360);//角度
			p.radians = angle * Math.PI / 180;//弧度
			p.x = sx;
			p.y = sy;
			p.speed = Math.random() * 5 ;//速度
			p.radius = p.speed;//半径
			p.size = Math.ceil(Math.random() *4) ;//大小
            p.hue=Math.floor(Math.random() * 100) + 150;//颜色
			p.brightness = Math.floor(Math.random() * 31) + 50;//亮度
			p.alpha = (Math.floor(Math.random() * 61) + 40) / 100;//透明度
			particles.push(p);
		}
	}

4.创建一个画烟花的方法,用于实现烟花的效果

function drawFireworks() {
		clearCanvas();
		for (var i = 0; i < particles.length; i++) {
			var p = particles[i];
			var vx = Math.cos(p.radians) * p.radius;//小球水平方向落下时的距离
			var vy = Math.sin(p.radians) * p.radius + 0.4;//小球落下时的距离

			p.x += vx;
			p.y += vy;
			p.radius *= 1 - p.speed / 100;//半径
			p.alpha -= 0.005;//透明度
			if (p.alpha <= 0) {
				particles.splice(i, 1);
				continue;
			}
			context.beginPath();
            // 中心坐标 半径  角度
			context.arc(p.x, p.y, p.size, 0, Math.PI * 2);
			// context.closePath()
            // 颜色 饱和度 亮度  透明度
			context.fillStyle = 'hsla(' + p.hue + ', 100%,' + p.brightness + '%, ' + p.alpha + ')';
			context.fill();
		}
	}

5.创建一个实现烟花烟雾拖尾的效果:

function tick() {
		context.globalCompositeOperation = 'destination-out';
		context.fillStyle = 'rgba(0,0,0,' + 0.1 + ')';
		context.fillRect(0, 0, canvas.width, canvas.height);
		context.globalCompositeOperation = 'lighter';
		drawFireworks();//画烟火
        //浏览器下次重绘之前继续更新下一帧动画
		requestAnimationFrame(tick);
	}
	tick();

6.使用一个循环定时器,在屏幕上自动绽放烟花,这时烟花已经可以自动绽放

setInterval(function () {//当前视口随机创建烟花
	createFireworks(Math.random() * canvas.width, Math.random()
		* canvas.height);
}, 1000);

效果如下:
在这里插入图片描述
7.这里我们再添加一个鼠标点击事件,可以使用鼠标控制烟花在指定位置绽放:(这一步可以不写)

document.onmousedown=function(e){
        var x = e.clientX; //距离当前视口的横纵坐标
		var y = e.clientY;
		createFireworks(x, y);//创建烟花
    }

最后我们看看鼠标点击产生烟花的效果
在这里插入图片描述
将1-7步依次放入script标签中即可实现烟花效果

你学会了吗?
在这里插入图片描述

  • 17
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值