效果展示
参数
| 参数 |
说明 |
类型 |
可选值 |
默认值 |
| targetTime |
目标时间 |
string |
—— |
‘2021-08-12 19:44’ |
| callback |
回调函数 |
function |
—— |
callback(status, result){…} |
代码使用
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <!-- 6.25 --> <div id="box"> 倒计时 1小时2分钟34秒 </div> </body> <script src="./1.js"></script> <script> let time = '2020-08-11 21:05'; countDown(time, function (status, res) { if (status === 'doing') { box.innerHTML = `距离抢购还剩,${res.days}天${res.hours}小时${res.mintes}分${res.seconds}秒`; return; } box.innerHTML = '开抢啦!~~'; }); </script></html>
js 源码
/** * countDown * @author rockshang * @date 20-08-11 * @param { * targetTime: '2021-08-12 19:44', * callback(status, result){} * } */let countDownModule = (function () { let timer = null, nowTime = new Date(); // 从服务器获取时间 function getServerTime(callback) { // 异步回调函数传进来 var xhr = new XMLHttpRequest(); xhr.open('HEAD', ''); xhr.onreadystatechange = function () { if (xhr.readyState === 2 && xhr.status == 200) { callback(new Date(xhr.getResponseHeader('Date'))); } }; xhr.send(null); } // 计算时间 function computed(targetTime, cb) { let spanTime = new Date(targetTime) - nowTime; if (spanTime <= 0) { cb('done', null) clearInterval(timer); timer = null; return; } let days = Math.floor(spanTime / (24 * 60 * 60 * 1000)); spanTime = spanTime - days * 24 * 60 * 60 * 1000; let hours = Math.floor(spanTime / (60 * 60 * 1000)); spanTime = spanTime - hours * 60 * 60 * 1000; let mintes = Math.floor(spanTime / (60 * 1000)); spanTime = spanTime - mintes * 60 * 1000; let seconds = Math.floor(spanTime / 1000); days < 10 && days !== 0 ? (days = '0' + days) : null; hours < 10 && hours !== 0 ? (hours = '0' + hours) : null; mintes < 10 && mintes !== 0 ? (mintes = '0' + mintes) : null; seconds < 10 && seconds !== 0 ? (seconds = '0' + seconds) : null; cb('doing', { days, hours, mintes, seconds }) } function countDown( targetTime = '2021-08-12 19:44', cb ) { getServerTime((time) => { nowTime = time; computed(targetTime, cb); timer = setInterval((_) => { nowTime = +nowTime + 1000; computed(targetTime, cb); }, 1000); }); } // 引入JS文件使用 if (typeof window !== 'undefined') { window.countDown = countDown } // commonJS 导出,require导入 if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { module.exports = countDown; } return countDown;})();// ES6 导出的方式,import导入 import countDown from './count.js'export default countDownModule;