基于JavaScript如何实现除夕烟花秀与随机祝福语
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍基于JavaScript如何实现除夕烟花秀与随机祝福语,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!项目截图进入后的界面点击按钮点击之后的动画烟花结束后的界面代
千家信息网最后更新 2025年01月19日基于JavaScript如何实现除夕烟花秀与随机祝福语
这篇文章主要介绍基于JavaScript如何实现除夕烟花秀与随机祝福语,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
项目截图
进入后的界面
点击按钮
点击之后的动画
烟花结束后的界面
代码实现
涉及的技术:HTML5多媒体,CSS定位,动画,js面向对象,Jquery动画、事件
HTML代码
2022 虎虎生威
上面的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('').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][xss_clean] = 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); }); })
以上是"基于JavaScript如何实现除夕烟花秀与随机祝福语"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
烟花
生成
祝福
函数
祝福语
动画
盒子
按钮
代码
效果
样式
焰火
定时器
数组
页面
元素
对象
节流阀
面的
切换
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全+单选
linux部署数据库
网络安全法普法策划案
服务器u盘启动插哪里
cf服务器暂停怎么搞
数据库retain
保险公司数据库开发招聘
三门软件开发
易语言服务器读数据库
悬镜网络安全公司
cisco220服务器u引导
数据库数据的来源
阿里云服务器内网有啥用
北京华为服务器维修调试费用
南京国企招聘软件开发
网络安全大赛世界第一是谁
为什么会去日本搞软件开发
数据库中自定义列为一个数
辉县云锦网络技术有限公司
外盘手机软件开发
代谢物常用数据库
刺激战场高级服务器怎么获得
数据库最大空间不受限制
自助中心服务器列表
易语言服务器读数据库
网络安全知识论文5000字
凤凰佳影服务器大神
新一代信息网络安全接入网
列表数据存储数据库
医院里面 软件开发 工资