基于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实现除夕烟花秀与随机祝福语 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 原生JS实现 MUI导航栏透明渐变效果

    下面是原生JS实现MUI导航栏透明渐变效果的完整攻略: 简介 在网页制作中,导航栏通常是一个非常重要的组件,既要实现美观又要实现良好的交互效果。其中,透明渐变效果可以让导航栏更加的漂亮、高大上,对于那些要求高质量的网页来说,它也是不可缺少的一个效果。下面,我们就来详细讲解如何通过原生JS来实现MUI导航栏透明渐变效果。 主要步骤 1. 获取导航栏的相关元素 …

    css 2023年6月10日
    00
  • 点击地图div上的按钮实现对地图数据的入库操作

    针对这个问题,我会提供一份完整攻略,解释如何通过点击地图div上的按钮来实现对地图数据的入库操作。 步骤1:创建地图 首先,需要创建一个地图。可以使用开源的JS库,如Leaflet,OpenLayers等。在这里,我们以Leaflet为例。使用以下代码创建一个地图: <div id="map"></div> &lt…

    css 2023年6月10日
    00
  • js页面滚动时层智能浮动定位实现(jQuery/MooTools)

    实现 js 页面滚动时层智能浮动定位,可以使用 jQuery 或 MooTools 这样的 JavaScript 库。下面是实现步骤的详细攻略: 步骤一:在 HTML 页面中添加需要浮动定位的层 首先,在你的 HTML 页面中添加需要浮动定位的层。例如,你的页面中有一个 <div> 容器,里面包含一个 <p> 标签和一张图片: &lt…

    css 2023年6月10日
    00
  • vue实现动态控制表格列的显示隐藏

    实现动态控制表格列的显示隐藏是一个常见的需求,通常可以通过使用Vue.js来实现。下面是一个完整的攻略: 步骤一:通过v-if指令动态控制表格列的显示隐藏。 v-if指令可以根据条件来控制一个元素是否显示。我们可以根据用户选择来动态的添加或删除表格的列。 <template> <table> <thead> <tr&…

    css 2023年6月10日
    00
  • Vue使用Swiper封装轮播图组件的方法详解

    下面是“Vue使用Swiper封装轮播图组件的方法详解”的完整攻略: Vue使用Swiper封装轮播图组件的方法详解 Swiper简介 Swiper是一个流行的开源移动端滑动组件,可以快速实现诸如轮播图、滑块切换等效果。在Vue中使用Swiper可以很方便地实现这些效果。 封装轮播图组件 我们可以使用Vue的单文件组件以及Swiper组件来封装我们的轮播图组…

    css 2023年6月10日
    00
  • vue项目设置scrollTop不起作用(总结)

    针对”vue项目设置scrollTop不起作用”这个问题,我们可以总结一下完整的攻略。 首先需要明确的是什么情况下设置scrollTop不起作用,一般情况下包括以下两种情况: 1.设置scrollTop的元素display属性为none时,无法设置scrollTop。 2.设置scrollTop的元素并没有渲染完成,此时设置scrollTop也会无效。 针对…

    css 2023年6月10日
    00
  • JavaScript实现仿Clock ISO时钟

    实现仿Clock ISO时钟的过程大致可以分为以下几个步骤: 1. HTML结构 在HTML中创建一个div容器,并在其中嵌入需要显示时钟的三个元素 – 时、分、秒。如下所示: <div class="clock"> <span id="hour"></span> : <spa…

    css 2023年6月10日
    00
  • 基于html css实现带搜索图标的搜索框功能

    下面是基于html css实现带搜索图标的搜索框的完整攻略。 步骤1:html代码部分 首先我们需要使用html创建搜索框的代码,代码如下: <div class="search-box"> <input type="text" placeholder="Search"> &…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部