沃梦达 / IT编程 / 前端开发 / 正文

基于JavaScript实现除夕烟花秀与随机祝福语

基于JavaScript实现除夕烟花秀与随机祝福语需要按照以下步骤进行。

基于JavaScript实现除夕烟花秀与随机祝福语需要按照以下步骤进行。

1. 设计烟花特效

使用canvas绘图,生成烟花特效效果的实现流程如下:

  1. 在画布中随机生成烟花的起点x和y坐标
  2. 烟花运动轨迹的设计可以使用二次贝塞尔曲线,设计一个终点位置,并为每个粒子产生逐渐减小的速度,模拟爆炸效果,并使用rgba透明度渐变
  3. 根据设定的爆炸半径、及颜色变化规律,生成烟花爆炸特效,并用之前的速度逐渐减小粒子大小,实现动效。最后使用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实现除夕烟花秀与随机祝福语