js实现指定时间倒计时,带标题闪烁提示
问题
- 经常需要设定一个活动倒计时提醒,指定一个时间进行倒计时
- 或者是自己做时间规划,做计时功能指定到几点完成任务,这时候还需要在网页标签上有提醒
解决
主要是时间的计算
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>倒计时</title>
<style>
* {
margin: 0;
padding: 0;
}
div,p {
font-size: 80px;
text-align: center;
}
#showTime span {
color: red;
}
#showTime span.time {
color: black
}
body {
padding-top: 200px;
}
</style>
</head>
<body>
<div>距离 <div id="timeSpan"></div> 还有</div>
<p id="showTime"><span></span></p>
<script>
var timeSet = '2020/4/13 00:10:00';
document.querySelector('#timeSpan').innerHTML = timeSet;
var msg = {
time: 0,
title: document.title,
timer: null,
//显示新消息提示
show: function () {
var title = msg.title.replace("", "").replace("【时间到啦】", "");
//定时器,此处产生闪烁
//由于定时器无法清除,在此调用之前先主动清除一下定时器打到缓冲效果,否则定时器效果叠加标题闪烁频率越来越快
clearTimeout(msg.timer);
msg.timer = setTimeout(function () {
msg.time++;
msg.show();
if (msg.time % 2 == 0) {
document.title = "【时间到啦】" + title
} else {
document.title = title
};
}, 300);
return [msg.timer, msg.title];
},
//取消新消息提示
//此处起名最好不要用clear,由于关键字问题有时可能会无效
clears: function () {
clearTimeout(msg.timer);
document.title = "哈哈哈";
}
};
var oSpan = document.getElementsByTagName('span')[0];
function tow(n) {
return n >= 0 && n < 10 ? '0' + n : '' + n;
}
function getDate() {
var oDate = new Date();//获取日期对象
var oldTime = oDate.getTime();//现在距离1970年的毫秒数
var newDate = new Date(timeSet);
var newTime = newDate.getTime();//2019年距离1970年的毫秒数
var second = Math.floor((newTime - oldTime) / 1000);//未来时间距离现在的秒数
var day = Math.floor(second / 86400);//整数部分代表的是天;一天有24*60*60=86400秒 ;
second = second % 86400;//余数代表剩下的秒数;
var hour = Math.floor(second / 3600);//整数部分代表小时;
second %= 3600; //余数代表 剩下的秒数;
var minute = Math.floor(second / 60);
second %= 60;
var str =
tow(day) + '<span class="time">天</span>'
+ tow(hour) + '<span class="time">小时</span>'
+ tow(minute) + '<span class="time">分钟</span>'
+ tow(second) + '<span class="time">秒</span>';
oSpan.innerHTML = str;
if (tow(minute) == '00' && tow(second) == '00') {
msg.show()
alert('时间到啦!')
}
}
getDate();
setInterval(getDate, 1000);
</script>
</body>
</html>