倒计时案例
核心思路
核心思路:输入的时间减去现在的时间就是剩余的时间,即倒计时,不能直接来减,需要利用时间戳得到两个时间差的总毫秒数,然后把总毫秒数转化为天、时、分、秒
生日倒计时
比如现在来做一个生日倒计时
首先得到现在的时间
var now = new Date();
然后获取今年生日日期对象生日09月04号
var year = now.getFullYear();
var future = new Date(year,08,04)
注意月份要输入08,因为js中getMonth()这个方法获取的其实是索引值。他的值是从0开始的。所以要加1才会得到真正的月份。
然后获取总毫秒数,两个一减,获取总毫秒数有三种方法
// 实例化Date对象
var now = new Date();
// 1. 用于获取对象的原始值
console.log(date.valueOf())
console.log(date.getTime())
// 2. 简单写可以这么做
var now = +new Date();
// 3. HTML5中提供的方法,有兼容性问题
var now = Date.now();
具体实现
先画一个简单界面
<div class="timer">
<h1>倒计时案例</h1>
<p>距离今年生日还有:</p>
<span class="day">天</span>
<div class="sfm">
<span class="hour">时</span>
<span class="minute">分</span>
<span class="second">秒</span>
</div>
</div>
/*清除默认样式*/
* {
margin: 0;
padding: 0;
}
body,
html {
background: url(image/1.png) no-repeat;
background-size: 100% 100%;
background-attachment: fixed;
}
.timer {
display: flex;
flex-direction: column;
align-items: center;
width: 900px;
height: 350px;
background: rgba(255, 255, 255, .6);
margin: 200px auto 0;
border-radius: 25px;
}
/* 移动端适配 */
@media screen and (max-width:768px) {
.timer {
width: 350px;
height: 350px;
}
}
.timer h1 {
margin-top: 50px;
width: 200px;
height: 100px;
line-height: 100px;
text-align: center;
color: blue
}
.timer p {
width: 300px;
height: 30px;
line-height: 30px;
font-size: 20px;
text-align: center;
}
.timer .day {
margin-top: 20px;
font-size: 30px;
font-weight: 700;
}
.sfm {
display: flex;
justify-content: center;
margin-top: 20px;
font-size: 25px;
}
.sfm span {
margin: 8px;
}
获取相应元素以后,用一个定时器实现动态效果
//输入的时间减去现在的时间就是剩余的时间,即倒计时,不能直接来减,需要利用时间戳得到两个时间差的总毫秒数,然后把总毫秒数转化为天、时、分、秒
//获取元素
var day = document.querySelector('.day');
var hour = document.querySelector('.hour');
var minute = document.querySelector('.minute');
var second = document.querySelector('.second');
var sfm = document.querySelector('.sfm');
setInterval(function () {
//现在的时间戳
var now = +new Date();
//得到现在的年份
var year = new Date().getFullYear();
//得到生日时候的时间戳
var future = +new Date(year, 08, 04);
var diffDay, diffHour, diffMinute, diffSecond;
var diffTime = future - now;
//如果过了生日显示生日已经结束,天数归0
if (diffTime < 0) {
day.innerHTML = 0 + '天';
sfm.innerHTML = '今年生日已经结束了';
} else {
//时间戳转换成时分秒
diffSecond = Math.floor(diffTime / 1000 % 60);
diffSecond = diffSecond < 10 ? '0' + diffSecond : diffSecond;
second.innerHTML = diffSecond + '秒';
diffMinute = Math.floor(diffTime / 1000 / 60 % 60);
diffMinute = diffMinute < 10 ? '0' + diffMinute : diffMinute;
minute.innerHTML = diffMinute + '分';
diffHour = Math.floor(diffTime / 1000 / 60 / 60 % 24);
diffHour = diffHour < 10 ? '0' + diffHour : diffHour;
hour.innerHTML = diffHour + '时';
diffDay = Math.floor(diffTime / 1000 / 60 / 60 / 24);
diffDay = diffDay < 10 ? '0' + diffDay : diffDay;
day.innerHTML = diffDay + '天';
}
}, 1000);
Comments NOTHING