独书先生 Menu

js实现指定时间倒计时,带标题闪烁提示

问题

  1. 经常需要设定一个活动倒计时提醒,指定一个时间进行倒计时
  2. 或者是自己做时间规划,做计时功能指定到几点完成任务,这时候还需要在网页标签上有提醒

解决

主要是时间的计算

代码如下

<!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>