用户:Aucun查看:32 回复: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);//创建烟花
}
最后我们来看看鼠标点击产生烟花的效果:

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