猫史档案馆


纯js代码,制作炫酷烟花特效

用户:AucunAucun查看:777 回复:17 评论:32 创建时间:2022-05-07T15:21:45


废话不多说,接下来就来讲解

实现步骤:

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

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

创建一个窗口,设置宽高,并将窗口添加到body中,调用getContext方法:

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

设置窗口颜色为黑色:

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

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

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);
		}
	}

实现烟花的效果:

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

			p.x += 喵;
			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();
		}
	}

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

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() 

设置烟花自动绽放的机制:

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

添加一个可以使用鼠标控制烟花在指定位置绽放的机制(这一步可以不写):

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

最后我们来看看鼠标点击产生烟花的效果:

center_image


回复

上一页第 1 页 / 共 1 页下一页
毁灭者明世隐毁灭者明世隐

收藏收藏

点赞1


评论


殇羁503y勿忘_退殇羁503y勿忘_退

喵d

点赞0


评论

wa,大佬啊

az,我不是大佬

我记得你是我师傅(不确定

额,我怎么记得您是我师父啊(不确定

您?大佬你才是我师傅吧,我只是喵

好家伙,我懵了

e,那咱们总结一下,到底谁是谁的师傅

焯,这咋总结啊。

你来总结·

呃,您是我师父吧

额,可以把)

()

az

挖坟

反挖()


天气圣盐天气圣盐

哇

 

点赞0


评论


天气圣盐天气圣盐

py吗?

点赞0


评论

js

是html5,css3,javascript1.5


该账号已被封禁该账号已被封禁

这个可以诶!配合lively wallpaper做桌面真的很nb!

点赞1


评论

我不是很懂h喵l 第一个代码是不是应该是h喵l.body而不是h喵l,body......?

h喵l, body是对的,这属于css语法

哦 谢谢 代码看习惯了就莫名其妙有这种现象...


邑永邑永

喵!

center_imagecenter_imagecenter_image

点赞0


评论

???

???

怎么了

为什么你说了一个屏蔽词

应该是 草


yee089yee089

彳亍我学废了——

点赞0


评论

az


张允旭张允旭

最近也在学JS的我震惊了emotion_doge

点赞0


评论


用户_869149用户_869149

顶
要顶
必须顶
不得不顶
用尽全力顶
再加上千斤顶
总之把它顶到顶
接着使出葵花宝顶
就算顶到史前也要顶
老子看了会用道德经顶
孔子亲自拜你为师天天顶
秦始皇站在阿房宫上使劲顶
汉高祖挥师杀向东罗马为你顶
吕布抛弃了貂禅而选择了帮你顶
张三丰见了后用太极拳九式全力顶
左冷禅召开武林盟主大会商讨如何顶
西门吹雪从此学会了最强一招剑神一顶
龙剑飞的儒来神掌最后一式改为万佛朝顶
陆小凤从此再也不管闲事了而专门来为你顶
四大名捕四面出击看天下还有没有人敢不在顶
顶到阎罗王说我制造噪音我刁根烟看看他继续顶
顶到火山喷发太平洋海啸我还要继续往喵里顶
顶到益阳地震山崩地裂地下水泛滥我还要顶
顶到地下水喷发造成洪灾损失惨重我也顶
要是你觉得敢兴趣你也可以过来一起顶
要是你看我不爽我没办法还要继续顶
要是 C T敢过来阻止我就更加要顶
要是别人见了骂我傻我还是要顶
要是踩到我脚喵我也继续顶
要是地面凹了我不管继续顶
要是天真塌下来了继续顶
就算天塌下来我都要顶
就算鸡店倒闭也要顶
就算鞋子烂也要顶
我用尽全力去顶
我非常用力顶
我很用力顶
我用力顶
我再顶
顶顶
顶

点赞2


评论


小鱼yuzifu小鱼yuzifu

center_image

我故意找茬,这不是jsemotion_doge

点赞0


评论

http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/doge_thumb.gif

+1 这不是css吗()


༺追梦の人༻༺追梦の人༻

你确定这是python?

点赞0


评论

js

纯js代码,制作炫酷烟花特效

原来如此

不是python


AucunAucun

ddd

点赞1


评论


小电鼠vdc1小电鼠vdc1

顶
要顶
必须顶
不得不顶
用尽全力顶
再加上千斤顶
总之把它顶到顶
接着使出葵花宝顶
就算顶到史前也要顶
老子看了会用道德经顶
孔子亲自拜你为师天天顶
秦始皇站在阿房宫上使劲顶
汉高祖挥师杀向东罗马为你顶
吕布抛弃了貂禅而选择了帮你顶
张三丰见了后用太极拳九式全力顶
左冷禅召开武林盟主大会商讨如何顶
西门吹雪从此学会了最强一招剑神一顶
龙剑飞的儒来神掌最后一式改为万佛朝顶
陆小凤从此再也不管闲事了而专门来为你顶
四大名捕四面出击看天下还有没有人敢不在顶
顶到阎罗王说我制造噪音我刁根烟看看他继续顶
顶到火山喷发太平洋海啸我还要继续往喵里顶
顶到益阳地震山崩地裂地下水泛滥我还要顶
顶到地下水喷发造成洪灾损失惨重我也顶
要是你觉得敢兴趣你也可以过来一起顶
要是你看我不爽我没办法还要继续顶
要是 C T敢过来阻止我就更加要顶
要是别人见了骂我傻我还是要顶
要是踩到我脚喵我也继续顶
要是地面凹了我不管继续顶
要是天真塌下来了继续顶
就算天塌下来我都要顶
就算鸡店倒闭也要顶
就算鞋子烂也要顶
我用尽全力去顶
我非常用力顶
我很用力顶
我用力顶
我再顶
顶顶
顶

点赞0


评论


AucunAucun

喵d

点赞0


评论


AucunAucun

喵d

点赞0


评论


AucunAucun

ddd

点赞0


评论


我叫昵称我叫昵称

哇!这玩意kitten都难搞。

点赞1


评论