涉及的技术:html5多媒体,css定位,动画,js面向对象,jquery动画、事件
<!doctype html><html lang="cn"><head> <meta chart="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个重要元素。
/*清除默认的边距*/* { 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 int; 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(行为)吧
1、生成烟花球和焰火
$(function() {//封装一个生成随机数的函数,方便后期随机生成烟花焰火的个数,大小,位置 function rand(min, max) { return math.random() * (max - min) + min; } //创建一个构造函数,构造函数中调用随机函数,生成500温馨小故事-1000之间随机的随机数,用于生成焰火的个数 function birth() { this.sum = parint(rand(500, 1000)); } //在构造函数的原型对象上添加随机生成位置,大小的函数,里面调用之前定义的随机函数 birth.prototype.suiji = function() { //随机生成一个x轴坐标 this.x = parint(rand(0, 50)); //随机生成一个y轴坐标 this.y = parint(rand(0, 50)); //随机生成一个宽度,因为生成的焰火式正圆,所以这里生成的焰火宽高式相等 this.w = parint(rand(1, 3)); //随机生成一个rgb颜色(0-255之间哦) this.color = parint(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 = fal; //定义一个全局变量用来存储页面中的定时器 let t; //快速切换祝福语的函数 function tzf() { //使用定时器,每0.01秒执行一次定时器中的代码 t = tinterval(function() { /*判断ind是不是等于数组长度-1,以免小标超出数组实际长度出现undefinde, 如果是,就将ind归零,不是就继续自加*/ if (ind >= arr.length - 1) { ind = 0; } el { ind++; } /*将从数组中读取出来的祝福语,渲染到页面中*/ $('#blessing')[0].innerhtml = arr[ind]; },购买古筝 10); } /*调用上面的函数,让页面一打开就开始执行,因为其css样式设置了隐藏, 所以这里即使页面一打开,用户也看不见*/ tzf(); /*当暂停按钮被点击后,我们开始判断,节流阀如果是真,就调用上面的函数, 实现开始切换祝福语的效果,并将节流阀关闭*/ $('#btn')[0].onclick = function() { if (isok) { tzf(); isok = fal; } el { /*如果节流阀是关闭的(isok=fal),就清除定时器,到达暂停的效果, 然后将节流阀打开,方便下次开启切换*/ 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(); weite //给烟花盒子添加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 = tinterval(() => { if (math.abs(box.offt().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烟花 随机祝福语的资料请关注www.887551.com其它相关文章!
本文发布于:2023-04-04 18:17:43,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/0068c25a38e8046a43beaac86c685c79.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:基于JavaScript实现除夕烟花秀与随机祝福语.doc
本文 PDF 下载地址:基于JavaScript实现除夕烟花秀与随机祝福语.pdf
留言与评论(共有 0 条评论) |