今天的小案例需要做一个倒计时的效果
我们的时分秒需要一直进行倒计时,然后我们的页面颜色需要根据定时器的操作来进行更换,首先我们还是可以来分析一下我们的HTML步骤
<div class="countdown"><p class="next">今天是2222年2月22日</p><p class="title">下班倒计时</p><p class="clock"><span id="hour">00</span><i>:</i><span id="minutes">25</span><i>:</i><span id="scend">20</span></p><p class="tips">18:30:00下课</p></div>
在然后就让我们来修饰一下这个案例使用CSS
.countdown {width: 240px;height: 305px;text-align: center;line-height: 1;color: #fff;background-color: brown;/* background-size: 240px; *//* float: left; */overflow: hidden;}.countdown .next {font-size: 16px;margin: 25px 0 14px;}.countdown .title {font-size: 33px;}.countdown .tips {margin-top: 80px;font-size: 23px;}.countdown small {font-size: 17px;}.countdown .clock {width: 142px;margin: 18px auto 0;overflow: hidden;}.countdown .clock span,.countdown .clock i {display: block;text-align: center;line-height: 34px;font-size: 23px;float: left;}.countdown .clock span {width: 34px;height: 34px;border-radius: 2px;background-color: #303430;}.countdown .clock i {width: 20px;font-style: normal;}
下面就是我们的JS部分了
我们第一部先来做这个页面的随机颜色,这块就是我们JS基础的部分了,先使用方法来定义一个随机函数,如果是true,我们就返回纯白色,如不是我们就来返回随机的颜色
第一步是纯白色的操作
既然需要返回随机的颜色我们就先需要创建一个数组,然后for循环遍历这条数组只会,来随机这个素组的索引号
然后返回这个字符串str
如是flase呢我们就需要返回随机一个的十进制的颜色,最后返回的结果也是使用我们模板字符串进行改变页面颜色
然后我们需要获取html里面的颜色来进行样式修改变成随机的颜色,下面再使用定时器,讲我们上面随机颜色的步骤放到定时器里面,并且设置每隔3s就换一次颜色的操作
第二步操作:我们需要封装一个函数getCountTime,然后进行相关样式的获取,为了就是要把盒子死数据改成活数据,所以当我们获取完毕后,就需要定义一个实例的函数,然后讲我们的数据改成当前时间比如我现在是2023/6/8,1:54,那么就会显示出这个时间点
然后需要指定一个定时器来完成每隔一秒实现倒计时的操作
第三步操作我们先获取现在的时间戳,然后获取以后的时间戳,当我们得到剩余时间,需要转换成秒数,我已经把公式写道下面来了,大家可以自行观看,然后我们需要进行补0操作,为什么要进行补0操作,为了让我们时间显示更美观,比如08,09,当只有一位数时候,在前面就加上一个0,而这个操作已经用三元判断写出来了!不懂我们去w3c去查查资料什么叫三元运算符
最后我们需要把时间来写如这个盒子,所以我们得先获取三个盒子,然后通过innerHTML来获取当前时分秒的操作
后面定时器需要放一个函数,不然操作比较麻烦,我这个是比较全面的,写一个函数封装道里面,定时器每距离一秒进行倒计时操作
<script>// 随机颜色函数// 1. 自定义一个随机颜色函数function getRandomColor(flag = true) {if (flag) {// 3. 如果是true 则返回 #fffffflet str = '#'let arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']// 利用for循环随机抽6次 累加到 str里面for (let i = 1; i <= 6; i++) {// 每次要随机从数组里面抽取一个 // random 是数组的索引号 是随机的let random = Math.floor(Math.random() * arr.length)// str = str + arr[random]str += arr[random]}return str} else {// 4. 否则是 false 则返回 rgb(255,255,255)let r = Math.floor(Math.random() * 256) // 55let g = Math.floor(Math.random() * 256) // 89let b = Math.floor(Math.random() * 256) // 255return `rgb(${r},${g},${b})`}}//页面刷新得到随机的函数const countdown=document.querySelector('.countdown')countdown.style.background=getRandomColor()setInterval(function(){countdown.style.background=getRandomColor()},3000)function getCountTime(){const next=document.querySelector('.next')const date=new Date()next.innerHTML=date.toLocaleString()setInterval(function(){const date=new Date()next.innerHTML=date.toLocaleString()},1000)//1.得到当前的时间戳const now=+new Date()//2.得到将来的时间戳const last=+new Date('2023-7-1 18:30:00')//3.得到剩余时间戳count,记得转换为秒数const count=(last-now)/1000// console.log(count)// 4. 转换为时分秒// h = parseInt(总秒数 / 60 / 60 % 24) // 计算小时// m = parseInt(总秒数 / 60 % 60); // 计算分数// s = parseInt(总秒数 % 60); // let d = parseInt(count / 60 / 60 / 24) // 计算当前秒数let h = parseInt(count / 60 / 60 % 24)h = h < 10 ? '0' + h : hlet m = parseInt(count / 60 % 60)m = m < 10 ? '0' + m : mlet s = parseInt(count % 60)s = s < 10 ? '0' + s : sconsole.log(h, m, s)const hour=document.querySelector('#hour')const minutes=document.querySelector('#minutes')const scend=document.querySelector('#scend')hour.innerHTML=hminutes.innerHTML=mscend.innerHTML=s}//先调用一次getCountTime()//开启定时器setInterval(getCountTime,1000)</script>
今天的案例就到这块,记得二连噢!!,谢谢大家了!