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

目录
  • 项目截图
    • 进入后的界面
    • 点击按钮
    • 点击之后的动画
    • 烟花结束后的界面
  • 代码实现
    • HTML代码
    • CSS代码
    • javaScript代码

项目截图

进入后的界面

点击按钮

点击之后的动画

烟花结束后的界面

代码实现

涉及的技术:HTML5多媒体,CSS定位,动画,js面向对象,Jquery动画、事件

HTML代码

<!DOCTYPE html>
<html lang="cn">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>2022</title>
    <link rel="shortcut icon" href="./images/favicon.ico" rel="external nofollow"  type="image/x-icon">
    <link rel="stylesheet" href="./css/index.css" rel="external nofollow" >
    <script src="./js/jquery-3.6.0.min.js"></script>
    <script src="./js/index.js"></script>

</head>

<body>
    <!--这个是点击按钮的盒子,算是烟花筒 -->
    <div class="he">
        <!--这个是点击按钮,点击以后就开始做一些处理 -->
        <button id="fire"></button>
    </div>
    <!--这个是烟花哦-->
    <div class="box">
    </div>
    <!--这个是烟花结束后,出现在上面的2022图片
    <div class="title"></div>
    <!--这个就是随机生成祝福语的大盒子啦-->
    <div class="greetings">
        <!--可以通过这个div来动态的呈现祝福语,默认第一个是虎虎生威-->
        <div class="yu"><span id="blessing">虎虎生威</span></div>
        <!--这个是点击按钮,点击后停下快闪的祝福语-->
        <button id="btn">查看我的祝福</button>
    </div>

    <audio src="./meiti/chuxi.mp3"></audio>
    <audio src="./meiti/yanhua.mp3"></audio>
</body>

</html>

上面的html代码结构就是,烟花盒(.he)、点火按钮(.fire)、烟花(.box)、显示2022虎年logo(.title)、祝福语盒子(.greetings)、显示祝福的具体容器(.yu 和 .blessing)、暂停快速显示的按钮(.btn)、两个音频。一共10个重要元素。

CSS代码

/*清除默认的边距*/
* {
    margin: 0;
    padding: 0;
}

/*导入字体,用来设置在祝福语上*/
@font-face {
    font-family: 'djs';
    src: url(../font/datk6.ttf);
}

/*设置body超出隐藏,因为后面烟花会超出,导致页面被撑开*/
body {
    /* background: #EF3D04; */
    overflow: hidden;
    background: #F35708 url(../images/hebj.png)no-repeat center center/100% 100%;
}

/*烟花盒子我们让他居于底部居中对齐*/
.he {
    position: absolute;
    width: 160px;
    height: 120px;
    background: url(../images/hebj.png)no-repeat center center/100% 100%;
    border-radius: 5px 5px 0 0;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    z-index: 2;
    transition: all 3s;
}

.he button {
    position: absolute;
    bottom: 20px;
    left: 50%;
    transform: translateX(-50%);
    border: 1px solid #C33830;
    box-shadow: 0 0 5px #D7A057, 0 0 2px #D7A057 inset;
    border-radius: 5px;
    width: 50px;
    height: 50px;
    background: transparent url(../images/huzhua.png)no-repeat center center/100% 100%;
    font-size: 12px;
    color: yellow;
    font-weight: 700;
}

/*烟花盒子,我们也要让他在底部居中对齐,后期我们通过动画,改变top值,实现由下而上的发射效果*/
.box {
    position: absolute;
    width: 50px;
    height: 50px;
    border-radius: 50%;
    overflow: hidden;
    transition: all;
    top: calc(100% - 50px);
    left: 50%;
    transform: translateX(-50%);
}

/*这是烟花绽放生成的小点,就是哪些五颜六色的小点,后面通过js随机生成个数,位置,大小,因为是随机的所有这个只设置绝对定位,不给定具体的top和left值*/
.box span {
    position: absolute;
    display: inline-block;
    border-radius: 50%;
}

/*当box到达指定的top值后,我们就可以给box添加这个带动画的样式了,这个动画具体的效果我们写在后面*/
.fire {
    left: 50%;
    transform: translateX(-50%);
    animation: suofang 4.5s linear;
}

/*2022虎年logo的样式*/
.title {
    position: absolute;
    width: 300px;
    height: 150px;
    background: url(../images/hunian.png)no-repeat center center/100% 100%;
    top: 10px;
    left: 50%;
    transform: translateX(-50%);
    transition: all 1s;
    display: none;
}

/*祝福语盒子的样式,这里指的注意的是自身的目标top值,必须加上.title的top值*/
.greetings {
    position: absolute;
    top: 180px;
    width: 260px;
    height: 400px;
    background: #FFE5C8;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 30px;
    box-sizing: border-box;
    border-radius: 20px;
    overflow: hidden;
    opacity: 0;
}

/*这是显示句子的第二层盒子,其作用是让文本垂直排列,居中对齐*/
.yu {
    display: flex;
    justify-content: center;
    align-items: center;
    writing-mode: tb;
    width: 100%;
    height: 85%;
    border-radius: 10px;
    background: url(../images/zhufu.png)no-repeat center center/100% 100%;
}

/*这就是祝福与显示盒子的本体啦,这里主要设置字体样式*/
#blessing {
    font-size: 50px;
    font-weight: 800;
    color: rgba(0, 0, 0, 0.74);
    letter-spacing: 6px;
    font-family: 'djs';
}

/*暂停按钮*/
#btn {
    width: 100%;
    height: 15%;
    margin-top: 50px;
    border-radius: 10px;
    border: 1px solid #D7A057;
    color: #D7A057;
    font-size: 14px;
    font-weight: 700;
    background: url(../images/btn.png)no-repeat center center/100% 100%;
}

/*动画函数,我在写这个动画函数之前,就猜测,如果父元素缩放,
里面的子元素会不会随着一起缩放,写出来后,证明我的猜测是正确的*/
@keyframes suofang {
    0% {
        transform: scale(1);
        opacity: 1;
    }
    50% {
        transform: scale(20);
        opacity: .5;
    }
    100% {
        transform: scale(100);
        opacity: 0;
        display: none;
    }
}

以上的css代码,可以看到,我使用了大量的定位。这是因为后面的动画都需要基于定位的left和top来实现。

好啦结构和样式都有了,我们就来看看js(行为)吧

javaScript代码

1、生成烟花球和焰火

$(function() {
//封装一个生成随机数的函数,方便后期随机生成烟花焰火的个数,大小,位置
    function rand(min, max) {
        return Math.random() * (max - min) + min;
    }
    //创建一个构造函数,构造函数中调用随机函数,生成500-1000之间随机的随机数,用于生成焰火的个数
    function Birth() {
        this.sum = parseInt(rand(500, 1000));
    }
    //在构造函数的原型对象上添加随机生成位置,大小的函数,里面调用之前定义的随机函数
    Birth.prototype.suiji = function() {
        //随机生成一个X轴坐标
        this.x = parseInt(rand(0, 50));
        //随机生成一个Y轴坐标
        this.y = parseInt(rand(0, 50));
        //随机生成一个宽度,因为生成的焰火式正圆,所以这里生成的焰火宽高式相等
        this.w = parseInt(rand(1, 3));
        //随机生成一个rgb颜色(0-255之间哦)
        this.color = parseInt(rand(0, 255));
        //将生成的对象返回(抛出)
        return this;
    }

    //将上面的构造函数实例化为对象,这样这个对象就可以访问上面构造函数生成的所有数据了
    const qiu = new Birth();
    //定义一个文档碎片,优化程序性能(减少页面重绘与回流)
    const jsbox = document.createDocumentFragment();
    //使用循环生成焰火,这里焰火使用span标签来表示
    for (var i = 0; i < qiu.sum; i++) {
        //获取本次循环生成的x轴坐标
        var x = qiu.suiji().x;
        //获取本次循环生成的y轴坐标
        var y = qiu.suiji().y;
        //获取本次循环生成的高和宽
        var w = qiu.suiji().w;
        //生成span元素,并将其追加到文档碎片中
        $(jsbox).append('<span></span>').children().eq(i).css({ 'background': `rgb(${qiu.suiji().color},${qiu.suiji().color},${qiu.suiji().color})`, 'width': w, 'height': w, 'left': x, 'top': y });
    }
    //将文档碎片追加到烟花盒子里,至此烟花部分结束
    $('.box').append(jsbox);

})

2、祝福语快速切换与暂停查看

    //我们将需要展示的祝福语,写在数组中,后期遍历这个数组就可以了
    const arr = ['虎虎生威', '财源滚滚', '虎年大运', '虎气冲天', '虎越新春', '虎虎虎虎'];

    //声明一个全局变量,用来当作下标访问数组
    let ind = 0;
    /*声明一个全局变量,用来当作节流阀,防止用户反复点击导致定时器叠加,
    祝福语切换太快,还能防止用户反复点击导致BGM重复播放*/
    let isok = false;

    //定义一个全局变量用来存储页面中的定时器
    let t;

    //快速切换祝福语的函数
    function setZf() {
    //使用定时器,每0.01秒执行一次定时器中的代码
    t = setInterval(function() {
        /*判断ind是不是等于数组长度-1,以免小标超出数组实际长度出现undefinde,
        如果是,就将ind归零,不是就继续自加*/
            if (ind >= arr.length - 1) {
                ind = 0;
            } else {
                ind++;
            }
            /*将从数组中读取出来的祝福语,渲染到页面中*/
            $('#blessing')[0].innerHTML = arr[ind];
        }, 10);
    }
    /*调用上面的函数,让页面一打开就开始执行,因为其CSS样式设置了隐藏,
    所以这里即使页面一打开,用户也看不见*/
    setZf();

    /*当暂停按钮被点击后,我们开始判断,节流阀如果是真,就调用上面的函数,
    实现开始切换祝福语的效果,并将节流阀关闭*/
     $('#btn')[0].onclick = function() {
        if (isok) {
            setZf();
            isok = false;
        } else {
        /*如果节流阀是关闭的(isok=false),就清除定时器,到达暂停的效果,
        然后将节流阀打开,方便下次开启切换*/
            clearInterval(t);
            isok = true;
        }
    }

3、点击开火按钮后所做的事情(一下代码使用了Jquery)

//获取元素并重新赋值
    const box = $('.box');
     const fire = $('#fire');

    let count;
    //当点火按钮被点击时,立马让烟花发射BGM开始播放,并将按钮设为禁止点击,防止用户反复点击,造成BUG重叠
    fire[0].onclick = function() {
        $('audio')[1].play();
        fire[0].disabled = true;
    }

    //当开火按钮被点击,利用这个事件的一点点的延迟效果(刚好是烟花发射BGM播放结束)播放新年BGM
    fire.click(function() {
        $('audio')[0].play();
        //给烟花盒子添加CSS样式,达到烟花居中显示
        box.css({
            left: '50%',
            transform: 'translateX(-50%)',
        })
        /*给烟花盒子添加动画,改变的是top值,当top等于100px时动画结束,因为box的top
        初始值位于屏幕的底部,让其top值改为100px,就形成了慢慢向上移动的视觉效果。*/
        box.animate({
            top: '100px',
            /*动画结束后,开始执行的函数*/
        }, function() {
        /*当烟花球到达指定位置后,给其添加带有动画(缩放)效果的CSS样式,达到烟花绽放的视觉效果*/
            box.addClass('fire');
            /*使用定时器判断,烟花是否绽放完成,绽放完成就让烟花球隐藏,让2022虎年logo显示,让祝福语盒子显示*/
            count = setInterval(() => {
                if (Math.abs(box.offset().top) == 100) {
                    box.css({ 'opacity': '0' })
                    $('.he').hide();
                    $('.title')[0].style.display = 'block';
                    $('.greetings')[0].style.opacity = '1';
                    $('body').css({
                    })
                    clearInterval(count);
                }
            }, 100);
        });
    })

以上就是这个项目的所有代码,再次预祝大家新年快乐,虎年大吉,财源滚滚。

项目体验链接:http://www.starqin920.cn/chuxi/index.html

以上就是基于JavaScript实现除夕烟花秀与随机祝福语的详细内容,更多关于JavaScript烟花 随机祝福语的资料请关注我们其它相关文章!

(0)

相关推荐

  • 基于Html+CSS+JS实现手动放烟花效果

    目录 效果展示 实现代码 Html Css JavaScript 雷迪森安的乡亲们,欢迎来到老实人的前端课堂,上次写了一个新春小盲盒,这大过年的,我把烟花都给你们准备好了,今天我们来写个小烟花吧. 效果展示 注意看有两种模式哦,可以自由切换,鼠标点哪里哪里有烟花,还可以自动放烟花 视频演示:html+css写一个烟花,源码请你直接拿走! 实现代码 Html <div id="tips"> <a id="manual" href="java

  • JavaScript实现烟花和福字特效

    目录 超能力一:放烟花 超能力二:写福字 隐藏能力:只有程序员能看懂的祝福 虎虎生威.虎年大吉. 事事都如意,虎虎有生气…… 都2022了你还在从网上复制粘贴这些2002年就烂大街的四句成语群发给你的亲朋好友? 不会吧不会吧,这也太敷衍了吧? 在这个辞旧迎新的美好时刻,一恩姐姐教你如何通过代码放烟花,写春联.用程序员特有的超能力 “卷死” 别人家的孩子们. 超能力一:放烟花 先带大家看看实现后超级酷炫的3D烟花效果图. 怎么样,是不是瞬间逼格暴涨?话不多说,着手整活: 在电脑上创建一个文本文档,

  • JavaScript实现五种不同烟花特效

    目录 一.简单大气的烟花 二.在农村看到的烟花 三.可点击的烟花 四.3D旋转烟花 五.可拖动视角的自定义烟花 一.简单大气的烟花 演示地址:http://haiyong.site/fireworks1 HTML代码: 这里的HTML代码很简短 <div> <canvas id="canvas"></canvas> </div> CSS代码 css也只有这两段内容 body{ background:black; overflow:hidd

  • js实现炫酷的烟花效果

    本文实例为大家分享了js实现炫酷的烟花效果的具体代码,供大家参考,具体内容如下 我们要理清整个流程的思路. 首先建立一块画布,用于展示烟花的效果,然后就要去思考烟花燃放的流程,我们都知道烟花通常都是先有一份飞上天,然后再分散成很多个小烟花,并且每一个小烟花都有不同的样式以及运动方式. 所有整体思路就是先建立一个div作为我们的大烟花,当大烟花运动到我们鼠标点击的位置的时候,大烟花就会消失,然后就会产生更多的小烟花,并且这些小烟花的运动轨迹样式各不相同. 1.建立一块画布(div)用于展示烟花的效

  • JavaScript实现带音效的烟花特效

    花了半个小时写的代码,这个html5 canvas新年烟花一定不会让大家失望! 首先我们看下静态的效果图: 文章末尾有动态的效果图,滑动即可看到!  JavaScript代码如下: $(function() { var canvas = $('#canvas')[0]; canvas.width = $(window).width(); canvas.height = $(window).height(); var ctx = canvas.getContext('2d'); // resize

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

    目录 项目截图 进入后的界面 点击按钮 点击之后的动画 烟花结束后的界面 代码实现 HTML代码 CSS代码 javaScript代码 项目截图 进入后的界面 点击按钮 点击之后的动画 烟花结束后的界面 代码实现 涉及的技术:HTML5多媒体,CSS定位,动画,js面向对象,Jquery动画.事件 HTML代码 <!DOCTYPE html> <html lang="cn"> <head> <meta charset="UTF-8&q

  • 基于JavaScript实现简单的随机抽奖小程序

    对于抽奖这样的小程序使用诸如VB,Delphi等工具来实现会比较的方便,由于本人机器上没有装这样的应用程序,所以只能另寻其道.为了使抽奖程序能够无需配置平台直接可以在任何一台机器上运行,开发工具和编译运行工具也能够经可能简单(诸如text文本即可编辑,window系统自带的浏览器即可编译运行的情况),决定尝试使用javascript来做.本人对javascript的研究不深,平时主要用于网站开发中对来自客户端的数据进行有效性判断(基于安全性的考虑,安全性要求高的网站尽量使用服务器端语言对数据有效

  • 基于javascript实现随机颜色变化效果

    本文实例讲解了基于javascript实现随机颜色变化效果,分享给大家供大家参考,具体内容如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>随机颜色变化效果</title> <style type="text/css"> #thediv{

  • 基于JavaScript实现随机颜色输入框

    废话不多说了额,具体代码如下所示: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> table{width:500px;height:400px;} table td{width:100px;height:50px;} </style> <script> window.onl

  • 基于JavaScript伪随机正态分布代码实例

    这篇文章主要介绍了基于JavaScript伪随机正态分布代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在游戏开发中经常遇到随机奖励的情况,一般会采取先生成数组,再一个一个取的方式发随机奖励. 下面是js测试正态分布代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <ti

  • 基于JavaScript实现微信抢红包功能

    金额随机:额度在0.01和(剩余平均值*2)之间. /** * 抢红包 * @param {[number]} totalAmount [总金额] * @param {[number]} totalPeople [总人数] * @return {[Array]} [每个人抢到的金额] */ function assign(totalAmount, totalPeople){ var remainAmount = +totalAmount; var remainPeople = +totalPeo

  • 基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

    随着html5的兴起,那些公司对大型游戏的开发正在慢慢疏远,一.开发周期长:二.运营花费高:他们正找一些能够克服这些缺点的替代品.正好,html5的出现可以改变这些现状,在淘宝.京东等一些大型电商网站.QQ.微信等聊天软件都出现了html5的小游戏,这说明html5越来越受到大家的青睐.接下来我用javascript实现一个小型游戏---打地鼠. 一.游戏简介 打地鼠这个游戏相信大家都不陌生,也是童年时候一款经典的游戏.本次游戏的编写是以html文件形式完成的,并且使用HBulider软件进行编

  • 如何基于javascript实现贪吃蛇游戏

    这篇文章主要介绍了如何基于javascript实现贪吃蛇游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 html代码: <div class="content"> <div class="btn startBtn"> <!-- 开始按钮 --> <button type="button"></button> </div>

  • Python新年炫酷烟花秀代码

    先介绍下 Pygame 绘制烟花的基本原理,烟花从发射到绽放一共分为三个阶段: 1,发射阶段:在这一阶段烟花的形状是线性向上,通过设定一组大小不同.颜色不同的点来模拟“向上发射” 的运动运动,运动过程中 5个点被赋予不同大小的加速度,随着时间推移,后面的点会赶上前面的点,最终所有点会汇聚在一起,处于 绽放准备阶段: 2,烟花绽放:烟花绽放这个阶段,是由一个点分散多个点向不同方向发散,并且每个点的移动轨迹可需要被记录,目的是为了追踪整个绽放轨迹. 3,烟花凋零,此阶段负责描绘绽放后烟花的效果,绽放

  • 基于JavaScript实现新年贺卡特效

    目录 动图演示 主要代码 css样式 Javascirpt 动图演示 一款超级炫酷的2022新年快乐html网页特效,霓虹的城市夜景和绚烂的烟花很是特别,该html页面还有交互效果,点击鼠标就会呈现烟花绽放的特效,唯美不过如此.图片可以换成自己喜欢的夜景或人物都可以.​ 主要代码 图片选择引入: html, body { margin: 0; padding: 0; overflow: hidden; background: #000; font-family: Montserrat, sans

随机推荐