基于JavaScript实现除夕烟花秀与随机祝福语需要按照以下步骤进行。
基于JavaScript实现除夕烟花秀与随机祝福语需要按照以下步骤进行。
1. 设计烟花特效
使用canvas绘图,生成烟花特效效果的实现流程如下:
- 在画布中随机生成烟花的起点x和y坐标
- 烟花运动轨迹的设计可以使用二次贝塞尔曲线,设计一个终点位置,并为每个粒子产生逐渐减小的速度,模拟爆炸效果,并使用rgba透明度渐变
- 根据设定的爆炸半径、及颜色变化规律,生成烟花爆炸特效,并用之前的速度逐渐减小粒子大小,实现动效。最后使用setTimeout调用函数多次循环执行实现烟花的频繁爆炸效果。
这样就能够实现火花特效的设计。
2. 设计祝福语语句
可以在一个数组中存放不同的随机祝福语,随即取出,形成随机展示。确定大量祝福语句的关键是要确保语句都是具有完整的结构、优美的语言,以及展现出新年的祝福和祝福语的特殊性。
3. 绑定事件,引入应用
使用window.load,在网页载入后,将canvas添加到DOM中,在页面上绑定“打开烟花”按钮。当按钮点击一次时,在canvas上生成随机位置的烟花,并随机展示祝福语,整个烟花效果随着创造,展示多次。
示例一:绘制烟花特效
示例代码如下:
var canvas = document.getElementById('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var ctx = canvas.getContext('2d');
var fireworks = [];
function drawFireworks() {
var fireworks_num = 5;
while (fireworks_num --) {
fireworks.push(new Firework());
}
requestAnimationFrame(drawFireworks);
}
drawFireworks();
function Firework() {
this.vx = Math.random() * 5 - 2.5;
this.vy = Math.random() * 5 - 2.5;
this.gravity = 0.03;
this.opacity = 1;
this.trailOpacity = 0.7;
this.hue = Math.floor(Math.random() * 360);
this.color = 'hsla(' + this.hue + ',100%,50%, ' + this.opacity + ')';
this.trailLength = 10;
this.x = canvas.width / 2;
this.y = canvas.height;
this.trail = [];
this.trailMaxNum = 20;
this.radius = 6;
this.explode = false;
this.update = function () {
if (!this.explode) {
this.x += this.vx;
this.vy += this.gravity;
this.y += this.vy;
this.opacity -= 0.006;
this.color = 'hsla(' + this.hue + ',100%,50%, ' + this.opacity + ')';
this.trail.push([this.x, this.y]);
if (this.trail.length > this.trailMaxNum || this.opacity < 0.1) this.explode = true;
} else {
if (this.radius < 6) this.radius += 0.2;
else {
ctx.globalCompositeOperation = 'lighter';
for (var i = 0; i < 80; i ++) {
ctx.beginPath();
ctx.fillStyle = 'hsla(' + this.hue + ',100%,' + Math.floor(Math.random()*60+20) + '%,' + this.opacity + ')';
ctx.arc(this.x, this.y, this.radius, Math.PI * 2, false);
ctx.fill();
}
ctx.globalCompositeOperation = 'source-over';
this.trail = [];
this.color = 'hsla(' + this.hue + ',100%,50%,' + this.trailOpacity + ')';
this.radius = 0;
this.explode = false;
this.opacity = 1;
}
}
this.draw();
};
this.draw = function () {
if (!this.explode) {
ctx.beginPath();
ctx.fillStyle = this.color;
ctx.arc(this.x, this.y, this.radius, Math.PI * 2, false);
ctx.fill();
if (this.trail.length) {
for (var i = 0; i < this.trail.length; i ++) {
ctx.globalAlpha = i / this.trail.length;
ctx.beginPath();
ctx.fillStyle = 'hsla(' + this.hue + ',100%,50%,' + this.trailOpacity + ')';
ctx.arc(this.trail[i][0], this.trail[i][1], this.radius/2, Math.PI * 2, false);
ctx.fill();
}
}
}
};
}
例如,上述代码中,使用canvas实时实现加入火花效果,每秒限制烟花的个数,等待着调用,生成效果十分炫酷。
示例二:生成祝福语句
示例代码如下:
var wishes = [
"祝你猪事顺利,阖家欢乐,荧屏高清无码,收入高薪无忧,财运亨通,天天好心情,开心满满。",
"祝福你快快乐乐过大年,工作顺利,事业有成,心想事成,身体健康,阖家幸福,财源广进!",
"祝您猪年心想事成、身体倍棒、收入倍增、家有金童玉女、和美永存,财神来时宜作戏,新年兆头助您飞,祝新春快乐!",
"愿猪年健康平安,愿万事顺遂风和日丽,愿所有努力都有回报,愿财运亨通美好生活随行。",
"祝大千世界好开心,金猪送福如意非;快乐满怀事事圆,瑞猪报喜幸福满。祝您家庭和谐,工作顺利,身体健康,合家幸福!"
];
function randomWish() {
var index = Math.floor(Math.random() * wishes.length);
return wishes[index];
}
例如,使用数组存储大量的祝福语,通过随机,来获得新的祝福语句。
沃梦达教程
本文标题为:基于JavaScript实现除夕烟花秀与随机祝福语
猜你喜欢
- JavaScrip简单数据类型隐式转换的实现 2023-07-09
- 基于HTML+JavaScript实现中国象棋 2022-08-31
- jquery ajax实现文件上传功能实例代码 2023-02-15
- 同一个页面用多个id有什么影响 2022-11-04
- input submit、button和回车键提交数据详解 2022-11-13
- Javascript的独特的概念之闭包 2022-11-20
- 探讨vertical-align应用 2022-10-16
- 无限分级和tree结构数据增删改【附DEMO下载】 2022-12-28
- vue的 Mixins (混入) 2023-10-08
- JavaScript中的location、history、navigator对象实例介绍 2023-07-10