🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

countdown-pro

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

countdown-pro - npm Package Compare versions

Comparing version
2.0.2
to
2.0.3
+5
-3
dist/countdown.cjs.js

@@ -97,3 +97,3 @@ 'use strict';

// @ts-ignore
this.options[prop] = options[prop];
this.o[prop] = options[prop];
}

@@ -119,4 +119,6 @@ // 倒计时长

CountDown.prototype.pause = function () {
clearTimeout(this.timer);
this.counting = false;
if (this.counting) {
clearTimeout(this.timer);
this.counting = false;
}
};

@@ -123,0 +125,0 @@ // 重置

@@ -95,3 +95,3 @@ /**

// @ts-ignore
this.options[prop] = options[prop];
this.o[prop] = options[prop];
}

@@ -117,4 +117,6 @@ // 倒计时长

CountDown.prototype.pause = function () {
clearTimeout(this.timer);
this.counting = false;
if (this.counting) {
clearTimeout(this.timer);
this.counting = false;
}
};

@@ -121,0 +123,0 @@ // 重置

@@ -101,3 +101,3 @@ (function (global, factory) {

// @ts-ignore
this.options[prop] = options[prop];
this.o[prop] = options[prop];
}

@@ -123,4 +123,6 @@ // 倒计时长

CountDown.prototype.pause = function () {
clearTimeout(this.timer);
this.counting = false;
if (this.counting) {
clearTimeout(this.timer);
this.counting = false;
}
};

@@ -127,0 +129,0 @@ // 重置

@@ -1,1 +0,1 @@

{"version":3,"file":"countdown.umd.js","sources":["../src/util.ts","../src/countdown.ts"],"sourcesContent":["/**\n * 前置补零,如果值的长度小于目标长度,则前置补零,否则不处理\n *\n * @param num 待处理的值\n * @param targetLength 目标长度\n * @returns 补零后的值\n */\nexport function padZero(num: string | number, targetLength = 2) {\n let str = '' + num;\n while (str.length < targetLength) {\n str = '0' + str;\n }\n return str;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\n/**\n * 解析时间戳\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @returns 包含日/时/分/秒/毫秒的对象\n */\nexport function parseTimeData(timestamp: number) {\n return {\n days: Math.floor(timestamp / DAY),\n hours: Math.floor((timestamp % DAY) / HOUR),\n minutes: Math.floor((timestamp % HOUR) / MINUTE),\n seconds: Math.floor((timestamp % MINUTE) / SECOND),\n milliseconds: Math.floor(timestamp % SECOND)\n };\n}\n\n/**\n * 格式化时间格式\n *\n * @param format 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒\n * @param timeData 包含日/时/分/秒/毫秒的对象\n * @returns 返回格式化后的时间字符串\n */\nexport function parseFormat(format: string, timeData: ReturnType<typeof parseTimeData>) {\n // eslint-disable-next-line prefer-const\n let { days, hours, minutes, seconds, milliseconds } = timeData;\n\n if (format.indexOf('DD') === -1) {\n hours += days * 24;\n } else {\n format = format.replace('DD', padZero(days));\n }\n\n if (format.indexOf('HH') === -1) {\n minutes += hours * 60;\n } else {\n format = format.replace('HH', padZero(hours));\n }\n\n if (format.indexOf('mm') === -1) {\n seconds += minutes * 60;\n } else {\n format = format.replace('mm', padZero(minutes));\n }\n\n if (format.indexOf('ss') === -1) {\n milliseconds += seconds * 1000;\n } else {\n format = format.replace('ss', padZero(seconds));\n }\n\n return format.replace('SSS', padZero(milliseconds, 3));\n}\n\n/**\n * 格式化时间\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @param {string} [pattern='HH:mm:ss'] 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒。默认值为 HH:mm:ss\n * @returns {string} 返回格式化后的时间字符串\n */\nexport function format(timestamp: number, pattern = 'HH:mm:ss') {\n const timeData = parseTimeData(timestamp);\n return parseFormat(pattern, timeData);\n}\n\nexport const noop = () => {};\n","import { format, parseTimeData, parseFormat, padZero, noop } from './util';\n\ntype Options = {\n time: number;\n interval?: number;\n onChange?: (currentTime: number) => void;\n onEnd?: () => void;\n};\n\nclass CountDown {\n private o: Required<Options>; // alias\n options: Required<Options>;\n\n private timer: any;\n private counting: boolean;\n private completed: boolean;\n private currentTime: number;\n\n constructor(options: Options) {\n this.options = this.o = {\n onChange: noop,\n onEnd: noop,\n interval: 1000,\n time: 0\n };\n\n for (const prop in options) {\n // @ts-ignore\n this.options[prop] = options[prop];\n }\n\n // 倒计时长\n if (typeof this.o.time !== 'number' || this.o.time < 0) {\n this.o.time = 0;\n }\n\n this.timer = null; // 定时器\n this.counting = false; // 标识正在倒计时\n this.completed = false; // 标识倒计时完成\n this.currentTime = this.o.time; // 记录当前倒计时长\n }\n\n // 开始\n start() {\n if (this.counting || this.completed) {\n return;\n }\n\n this.counting = true;\n this.tick();\n }\n\n // 暂停\n pause() {\n clearTimeout(this.timer);\n this.counting = false;\n }\n\n // 重置\n reset() {\n this.pause();\n this.completed = false;\n if (this.currentTime !== this.o.time) {\n this.currentTime = this.o.time;\n this.o.onChange(this.currentTime);\n }\n }\n\n private tick() {\n const interval = this.o.interval;\n\n this.timer = setTimeout(() => {\n this.currentTime -= interval;\n\n if (this.currentTime < 0) {\n this.currentTime = 0;\n }\n\n this.o.onChange(this.currentTime);\n\n if (this.currentTime === 0) {\n this.counting = false;\n this.completed = true;\n this.o.onEnd();\n } else {\n this.tick();\n }\n }, interval);\n }\n\n static format = format;\n static parseTimeData = parseTimeData;\n static parseFormat = parseFormat;\n static padZero = padZero;\n}\n\nexport default CountDown;\n"],"names":[],"mappings":"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"}
{"version":3,"file":"countdown.umd.js","sources":["../src/util.ts","../src/countdown.ts"],"sourcesContent":["/**\n * 前置补零,如果值的长度小于目标长度,则前置补零,否则不处理\n *\n * @param num 待处理的值\n * @param targetLength 目标长度\n * @returns 补零后的值\n */\nexport function padZero(num: string | number, targetLength = 2) {\n let str = '' + num;\n while (str.length < targetLength) {\n str = '0' + str;\n }\n return str;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\n/**\n * 解析时间戳\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @returns 包含日/时/分/秒/毫秒的对象\n */\nexport function parseTimeData(timestamp: number) {\n return {\n days: Math.floor(timestamp / DAY),\n hours: Math.floor((timestamp % DAY) / HOUR),\n minutes: Math.floor((timestamp % HOUR) / MINUTE),\n seconds: Math.floor((timestamp % MINUTE) / SECOND),\n milliseconds: Math.floor(timestamp % SECOND)\n };\n}\n\n/**\n * 格式化时间格式\n *\n * @param format 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒\n * @param timeData 包含日/时/分/秒/毫秒的对象\n * @returns 返回格式化后的时间字符串\n */\nexport function parseFormat(format: string, timeData: ReturnType<typeof parseTimeData>) {\n // eslint-disable-next-line prefer-const\n let { days, hours, minutes, seconds, milliseconds } = timeData;\n\n if (format.indexOf('DD') === -1) {\n hours += days * 24;\n } else {\n format = format.replace('DD', padZero(days));\n }\n\n if (format.indexOf('HH') === -1) {\n minutes += hours * 60;\n } else {\n format = format.replace('HH', padZero(hours));\n }\n\n if (format.indexOf('mm') === -1) {\n seconds += minutes * 60;\n } else {\n format = format.replace('mm', padZero(minutes));\n }\n\n if (format.indexOf('ss') === -1) {\n milliseconds += seconds * 1000;\n } else {\n format = format.replace('ss', padZero(seconds));\n }\n\n return format.replace('SSS', padZero(milliseconds, 3));\n}\n\n/**\n * 格式化时间\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @param {string} [pattern='HH:mm:ss'] 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒。默认值为 HH:mm:ss\n * @returns {string} 返回格式化后的时间字符串\n */\nexport function format(timestamp: number, pattern = 'HH:mm:ss') {\n const timeData = parseTimeData(timestamp);\n return parseFormat(pattern, timeData);\n}\n\nexport const noop = () => {};\n","import { format, parseTimeData, parseFormat, padZero, noop } from './util';\n\nexport type Options = {\n time: number;\n interval?: number;\n onChange?: (currentTime: number) => void;\n onEnd?: () => void;\n};\n\nclass CountDown {\n private o: Required<Options>; // alias\n options: Required<Options>;\n\n private timer: any;\n private counting: boolean;\n private completed: boolean;\n private currentTime: number;\n\n constructor(options: Options) {\n this.options = this.o = {\n onChange: noop,\n onEnd: noop,\n interval: 1000,\n time: 0\n };\n\n for (const prop in options) {\n // @ts-ignore\n this.o[prop] = options[prop];\n }\n\n // 倒计时长\n if (typeof this.o.time !== 'number' || this.o.time < 0) {\n this.o.time = 0;\n }\n\n this.timer = null; // 定时器\n this.counting = false; // 标识正在倒计时\n this.completed = false; // 标识倒计时完成\n this.currentTime = this.o.time; // 记录当前倒计时长\n }\n\n // 开始\n start() {\n if (this.counting || this.completed) {\n return;\n }\n\n this.counting = true;\n this.tick();\n }\n\n // 暂停\n pause() {\n if (this.counting) {\n clearTimeout(this.timer);\n this.counting = false;\n }\n }\n\n // 重置\n reset() {\n this.pause();\n this.completed = false;\n if (this.currentTime !== this.o.time) {\n this.currentTime = this.o.time;\n this.o.onChange(this.currentTime);\n }\n }\n\n private tick() {\n const interval = this.o.interval;\n\n this.timer = setTimeout(() => {\n this.currentTime -= interval;\n\n if (this.currentTime < 0) {\n this.currentTime = 0;\n }\n\n this.o.onChange(this.currentTime);\n\n if (this.currentTime === 0) {\n this.counting = false;\n this.completed = true;\n this.o.onEnd();\n } else {\n this.tick();\n }\n }, interval);\n }\n\n static format = format;\n static parseTimeData = parseTimeData;\n static parseFormat = parseFormat;\n static padZero = padZero;\n}\n\nexport default CountDown;\n"],"names":[],"mappings":"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"}

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).CountDown=e()}(this,(function(){"use strict";function t(t,e){void 0===e&&(e=2);for(var i=""+t;i.length<e;)i="0"+i;return i}var e=1e3,i=60*e,n=60*i,o=24*n;function r(t){return{days:Math.floor(t/o),hours:Math.floor(t%o/n),minutes:Math.floor(t%n/i),seconds:Math.floor(t%i/e),milliseconds:Math.floor(t%e)}}function s(e,i){var n=i.days,o=i.hours,r=i.minutes,s=i.seconds,u=i.milliseconds;return-1===e.indexOf("DD")?o+=24*n:e=e.replace("DD",t(n)),-1===e.indexOf("HH")?r+=60*o:e=e.replace("HH",t(o)),-1===e.indexOf("mm")?s+=60*r:e=e.replace("mm",t(r)),-1===e.indexOf("ss")?u+=1e3*s:e=e.replace("ss",t(s)),e.replace("SSS",t(u,3))}function u(t,e){return void 0===e&&(e="HH:mm:ss"),s(e,r(t))}var c=function(){};return function(){function e(t){for(var e in this.options=this.o={onChange:c,onEnd:c,interval:1e3,time:0},t)this.options[e]=t[e];("number"!=typeof this.o.time||this.o.time<0)&&(this.o.time=0),this.timer=null,this.counting=!1,this.completed=!1,this.currentTime=this.o.time}return e.prototype.start=function(){this.counting||this.completed||(this.counting=!0,this.tick())},e.prototype.pause=function(){clearTimeout(this.timer),this.counting=!1},e.prototype.reset=function(){this.pause(),this.completed=!1,this.currentTime!==this.o.time&&(this.currentTime=this.o.time,this.o.onChange(this.currentTime))},e.prototype.tick=function(){var t=this,e=this.o.interval;this.timer=setTimeout((function(){t.currentTime-=e,t.currentTime<0&&(t.currentTime=0),t.o.onChange(t.currentTime),0===t.currentTime?(t.counting=!1,t.completed=!0,t.o.onEnd()):t.tick()}),e)},e.format=u,e.parseTimeData=r,e.parseFormat=s,e.padZero=t,e}()}));
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).CountDown=e()}(this,(function(){"use strict";function t(t,e){void 0===e&&(e=2);for(var i=""+t;i.length<e;)i="0"+i;return i}var e=1e3,i=60*e,n=60*i,o=24*n;function r(t){return{days:Math.floor(t/o),hours:Math.floor(t%o/n),minutes:Math.floor(t%n/i),seconds:Math.floor(t%i/e),milliseconds:Math.floor(t%e)}}function s(e,i){var n=i.days,o=i.hours,r=i.minutes,s=i.seconds,u=i.milliseconds;return-1===e.indexOf("DD")?o+=24*n:e=e.replace("DD",t(n)),-1===e.indexOf("HH")?r+=60*o:e=e.replace("HH",t(o)),-1===e.indexOf("mm")?s+=60*r:e=e.replace("mm",t(r)),-1===e.indexOf("ss")?u+=1e3*s:e=e.replace("ss",t(s)),e.replace("SSS",t(u,3))}function u(t,e){return void 0===e&&(e="HH:mm:ss"),s(e,r(t))}var c=function(){};return function(){function e(t){for(var e in this.options=this.o={onChange:c,onEnd:c,interval:1e3,time:0},t)this.o[e]=t[e];("number"!=typeof this.o.time||this.o.time<0)&&(this.o.time=0),this.timer=null,this.counting=!1,this.completed=!1,this.currentTime=this.o.time}return e.prototype.start=function(){this.counting||this.completed||(this.counting=!0,this.tick())},e.prototype.pause=function(){this.counting&&(clearTimeout(this.timer),this.counting=!1)},e.prototype.reset=function(){this.pause(),this.completed=!1,this.currentTime!==this.o.time&&(this.currentTime=this.o.time,this.o.onChange(this.currentTime))},e.prototype.tick=function(){var t=this,e=this.o.interval;this.timer=setTimeout((function(){t.currentTime-=e,t.currentTime<0&&(t.currentTime=0),t.o.onChange(t.currentTime),0===t.currentTime?(t.counting=!1,t.completed=!0,t.o.onEnd()):t.tick()}),e)},e.format=u,e.parseTimeData=r,e.parseFormat=s,e.padZero=t,e}()}));
//# sourceMappingURL=countdown.umd.min.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"countdown.umd.min.js","sources":["../src/util.ts","../src/countdown.ts"],"sourcesContent":["/**\n * 前置补零,如果值的长度小于目标长度,则前置补零,否则不处理\n *\n * @param num 待处理的值\n * @param targetLength 目标长度\n * @returns 补零后的值\n */\nexport function padZero(num: string | number, targetLength = 2) {\n let str = '' + num;\n while (str.length < targetLength) {\n str = '0' + str;\n }\n return str;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\n/**\n * 解析时间戳\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @returns 包含日/时/分/秒/毫秒的对象\n */\nexport function parseTimeData(timestamp: number) {\n return {\n days: Math.floor(timestamp / DAY),\n hours: Math.floor((timestamp % DAY) / HOUR),\n minutes: Math.floor((timestamp % HOUR) / MINUTE),\n seconds: Math.floor((timestamp % MINUTE) / SECOND),\n milliseconds: Math.floor(timestamp % SECOND)\n };\n}\n\n/**\n * 格式化时间格式\n *\n * @param format 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒\n * @param timeData 包含日/时/分/秒/毫秒的对象\n * @returns 返回格式化后的时间字符串\n */\nexport function parseFormat(format: string, timeData: ReturnType<typeof parseTimeData>) {\n // eslint-disable-next-line prefer-const\n let { days, hours, minutes, seconds, milliseconds } = timeData;\n\n if (format.indexOf('DD') === -1) {\n hours += days * 24;\n } else {\n format = format.replace('DD', padZero(days));\n }\n\n if (format.indexOf('HH') === -1) {\n minutes += hours * 60;\n } else {\n format = format.replace('HH', padZero(hours));\n }\n\n if (format.indexOf('mm') === -1) {\n seconds += minutes * 60;\n } else {\n format = format.replace('mm', padZero(minutes));\n }\n\n if (format.indexOf('ss') === -1) {\n milliseconds += seconds * 1000;\n } else {\n format = format.replace('ss', padZero(seconds));\n }\n\n return format.replace('SSS', padZero(milliseconds, 3));\n}\n\n/**\n * 格式化时间\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @param {string} [pattern='HH:mm:ss'] 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒。默认值为 HH:mm:ss\n * @returns {string} 返回格式化后的时间字符串\n */\nexport function format(timestamp: number, pattern = 'HH:mm:ss') {\n const timeData = parseTimeData(timestamp);\n return parseFormat(pattern, timeData);\n}\n\nexport const noop = () => {};\n","import { format, parseTimeData, parseFormat, padZero, noop } from './util';\n\ntype Options = {\n time: number;\n interval?: number;\n onChange?: (currentTime: number) => void;\n onEnd?: () => void;\n};\n\nclass CountDown {\n private o: Required<Options>; // alias\n options: Required<Options>;\n\n private timer: any;\n private counting: boolean;\n private completed: boolean;\n private currentTime: number;\n\n constructor(options: Options) {\n this.options = this.o = {\n onChange: noop,\n onEnd: noop,\n interval: 1000,\n time: 0\n };\n\n for (const prop in options) {\n // @ts-ignore\n this.options[prop] = options[prop];\n }\n\n // 倒计时长\n if (typeof this.o.time !== 'number' || this.o.time < 0) {\n this.o.time = 0;\n }\n\n this.timer = null; // 定时器\n this.counting = false; // 标识正在倒计时\n this.completed = false; // 标识倒计时完成\n this.currentTime = this.o.time; // 记录当前倒计时长\n }\n\n // 开始\n start() {\n if (this.counting || this.completed) {\n return;\n }\n\n this.counting = true;\n this.tick();\n }\n\n // 暂停\n pause() {\n clearTimeout(this.timer);\n this.counting = false;\n }\n\n // 重置\n reset() {\n this.pause();\n this.completed = false;\n if (this.currentTime !== this.o.time) {\n this.currentTime = this.o.time;\n this.o.onChange(this.currentTime);\n }\n }\n\n private tick() {\n const interval = this.o.interval;\n\n this.timer = setTimeout(() => {\n this.currentTime -= interval;\n\n if (this.currentTime < 0) {\n this.currentTime = 0;\n }\n\n this.o.onChange(this.currentTime);\n\n if (this.currentTime === 0) {\n this.counting = false;\n this.completed = true;\n this.o.onEnd();\n } else {\n this.tick();\n }\n }, interval);\n }\n\n static format = format;\n static parseTimeData = parseTimeData;\n static parseFormat = parseFormat;\n static padZero = padZero;\n}\n\nexport default CountDown;\n"],"names":["padZero","num","targetLength","str","length","SECOND","MINUTE","HOUR","DAY","parseTimeData","timestamp","days","Math","floor","hours","minutes","seconds","milliseconds","parseFormat","format","timeData","indexOf","replace","pattern","noop","CountDown","options","prop","this","o","onChange","onEnd","interval","time","timer","counting","completed","currentTime","prototype","start","tick","pause","clearTimeout","reset","_this","setTimeout"],"mappings":"0OAOgB,SAAAA,EAAQC,EAAsBC,QAAA,IAAAA,IAAAA,EAAgB,GAE5D,IADA,IAAIC,EAAM,GAAKF,EACRE,EAAIC,OAASF,GAClBC,EAAM,IAAMA,EAEd,OAAOA,CACT,CAEA,IAAME,EAAS,IACTC,EAAS,GAAKD,EACdE,EAAO,GAAKD,EACZE,EAAM,GAAKD,EAQX,SAAUE,EAAcC,GAC5B,MAAO,CACLC,KAAMC,KAAKC,MAAMH,EAAYF,GAC7BM,MAAOF,KAAKC,MAAOH,EAAYF,EAAOD,GACtCQ,QAASH,KAAKC,MAAOH,EAAYH,EAAQD,GACzCU,QAASJ,KAAKC,MAAOH,EAAYJ,EAAUD,GAC3CY,aAAcL,KAAKC,MAAMH,EAAYL,GAEzC,CASgB,SAAAa,EAAYC,EAAgBC,GAEpC,IAAAT,EAAgDS,EAA5CT,KAAEG,EAA0CM,EAArCN,MAAEC,EAAmCK,EAA5BL,QAAEC,EAA0BI,EAAQJ,QAAzBC,EAAiBG,EAAQH,aA0B9D,OAxB8B,IAA1BE,EAAOE,QAAQ,MACjBP,GAAgB,GAAPH,EAETQ,EAASA,EAAOG,QAAQ,KAAMtB,EAAQW,KAGV,IAA1BQ,EAAOE,QAAQ,MACjBN,GAAmB,GAARD,EAEXK,EAASA,EAAOG,QAAQ,KAAMtB,EAAQc,KAGV,IAA1BK,EAAOE,QAAQ,MACjBL,GAAqB,GAAVD,EAEXI,EAASA,EAAOG,QAAQ,KAAMtB,EAAQe,KAGV,IAA1BI,EAAOE,QAAQ,MACjBJ,GAA0B,IAAVD,EAEhBG,EAASA,EAAOG,QAAQ,KAAMtB,EAAQgB,IAGjCG,EAAOG,QAAQ,MAAOtB,EAAQiB,EAAc,GACrD,CASgB,SAAAE,EAAOT,EAAmBa,GAExC,YAFwC,IAAAA,IAAAA,EAAoB,YAErDL,EAAYK,EADFd,EAAcC,GAEjC,CAEO,IAAMc,EAAO,WAAQ,SC7E5B,WASE,SAAAC,EAAYC,GAQV,IAAK,IAAMC,KAPXC,KAAKF,QAAUE,KAAKC,EAAI,CACtBC,SAAUN,EACVO,MAAOP,EACPQ,SAAU,IACVC,KAAM,GAGWP,EAEjBE,KAAKF,QAAQC,GAAQD,EAAQC,IAIJ,iBAAhBC,KAAKC,EAAEI,MAAqBL,KAAKC,EAAEI,KAAO,KACnDL,KAAKC,EAAEI,KAAO,GAGhBL,KAAKM,MAAQ,KACbN,KAAKO,UAAW,EAChBP,KAAKQ,WAAY,EACjBR,KAAKS,YAAcT,KAAKC,EAAEI,IAC3B,CAsDH,OAnDER,EAAAa,UAAAC,MAAA,WACMX,KAAKO,UAAYP,KAAKQ,YAI1BR,KAAKO,UAAW,EAChBP,KAAKY,SAIPf,EAAAa,UAAAG,MAAA,WACEC,aAAad,KAAKM,OAClBN,KAAKO,UAAW,GAIlBV,EAAAa,UAAAK,MAAA,WACEf,KAAKa,QACLb,KAAKQ,WAAY,EACbR,KAAKS,cAAgBT,KAAKC,EAAEI,OAC9BL,KAAKS,YAAcT,KAAKC,EAAEI,KAC1BL,KAAKC,EAAEC,SAASF,KAAKS,eAIjBZ,EAAAa,UAAAE,KAAR,WAAA,IAoBCI,EAAAhB,KAnBOI,EAAWJ,KAAKC,EAAEG,SAExBJ,KAAKM,MAAQW,YAAW,WACtBD,EAAKP,aAAeL,EAEhBY,EAAKP,YAAc,IACrBO,EAAKP,YAAc,GAGrBO,EAAKf,EAAEC,SAASc,EAAKP,aAEI,IAArBO,EAAKP,aACPO,EAAKT,UAAW,EAChBS,EAAKR,WAAY,EACjBQ,EAAKf,EAAEE,SAEPa,EAAKJ,MAER,GAAER,IAGEP,EAAMN,OAAGA,EACTM,EAAahB,cAAGA,EAChBgB,EAAWP,YAAGA,EACdO,EAAOzB,QAAGA,EAClByB,CAAA"}
{"version":3,"file":"countdown.umd.min.js","sources":["../src/util.ts","../src/countdown.ts"],"sourcesContent":["/**\n * 前置补零,如果值的长度小于目标长度,则前置补零,否则不处理\n *\n * @param num 待处理的值\n * @param targetLength 目标长度\n * @returns 补零后的值\n */\nexport function padZero(num: string | number, targetLength = 2) {\n let str = '' + num;\n while (str.length < targetLength) {\n str = '0' + str;\n }\n return str;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\n/**\n * 解析时间戳\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @returns 包含日/时/分/秒/毫秒的对象\n */\nexport function parseTimeData(timestamp: number) {\n return {\n days: Math.floor(timestamp / DAY),\n hours: Math.floor((timestamp % DAY) / HOUR),\n minutes: Math.floor((timestamp % HOUR) / MINUTE),\n seconds: Math.floor((timestamp % MINUTE) / SECOND),\n milliseconds: Math.floor(timestamp % SECOND)\n };\n}\n\n/**\n * 格式化时间格式\n *\n * @param format 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒\n * @param timeData 包含日/时/分/秒/毫秒的对象\n * @returns 返回格式化后的时间字符串\n */\nexport function parseFormat(format: string, timeData: ReturnType<typeof parseTimeData>) {\n // eslint-disable-next-line prefer-const\n let { days, hours, minutes, seconds, milliseconds } = timeData;\n\n if (format.indexOf('DD') === -1) {\n hours += days * 24;\n } else {\n format = format.replace('DD', padZero(days));\n }\n\n if (format.indexOf('HH') === -1) {\n minutes += hours * 60;\n } else {\n format = format.replace('HH', padZero(hours));\n }\n\n if (format.indexOf('mm') === -1) {\n seconds += minutes * 60;\n } else {\n format = format.replace('mm', padZero(minutes));\n }\n\n if (format.indexOf('ss') === -1) {\n milliseconds += seconds * 1000;\n } else {\n format = format.replace('ss', padZero(seconds));\n }\n\n return format.replace('SSS', padZero(milliseconds, 3));\n}\n\n/**\n * 格式化时间\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @param {string} [pattern='HH:mm:ss'] 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒。默认值为 HH:mm:ss\n * @returns {string} 返回格式化后的时间字符串\n */\nexport function format(timestamp: number, pattern = 'HH:mm:ss') {\n const timeData = parseTimeData(timestamp);\n return parseFormat(pattern, timeData);\n}\n\nexport const noop = () => {};\n","import { format, parseTimeData, parseFormat, padZero, noop } from './util';\n\nexport type Options = {\n time: number;\n interval?: number;\n onChange?: (currentTime: number) => void;\n onEnd?: () => void;\n};\n\nclass CountDown {\n private o: Required<Options>; // alias\n options: Required<Options>;\n\n private timer: any;\n private counting: boolean;\n private completed: boolean;\n private currentTime: number;\n\n constructor(options: Options) {\n this.options = this.o = {\n onChange: noop,\n onEnd: noop,\n interval: 1000,\n time: 0\n };\n\n for (const prop in options) {\n // @ts-ignore\n this.o[prop] = options[prop];\n }\n\n // 倒计时长\n if (typeof this.o.time !== 'number' || this.o.time < 0) {\n this.o.time = 0;\n }\n\n this.timer = null; // 定时器\n this.counting = false; // 标识正在倒计时\n this.completed = false; // 标识倒计时完成\n this.currentTime = this.o.time; // 记录当前倒计时长\n }\n\n // 开始\n start() {\n if (this.counting || this.completed) {\n return;\n }\n\n this.counting = true;\n this.tick();\n }\n\n // 暂停\n pause() {\n if (this.counting) {\n clearTimeout(this.timer);\n this.counting = false;\n }\n }\n\n // 重置\n reset() {\n this.pause();\n this.completed = false;\n if (this.currentTime !== this.o.time) {\n this.currentTime = this.o.time;\n this.o.onChange(this.currentTime);\n }\n }\n\n private tick() {\n const interval = this.o.interval;\n\n this.timer = setTimeout(() => {\n this.currentTime -= interval;\n\n if (this.currentTime < 0) {\n this.currentTime = 0;\n }\n\n this.o.onChange(this.currentTime);\n\n if (this.currentTime === 0) {\n this.counting = false;\n this.completed = true;\n this.o.onEnd();\n } else {\n this.tick();\n }\n }, interval);\n }\n\n static format = format;\n static parseTimeData = parseTimeData;\n static parseFormat = parseFormat;\n static padZero = padZero;\n}\n\nexport default CountDown;\n"],"names":["padZero","num","targetLength","str","length","SECOND","MINUTE","HOUR","DAY","parseTimeData","timestamp","days","Math","floor","hours","minutes","seconds","milliseconds","parseFormat","format","timeData","indexOf","replace","pattern","noop","CountDown","options","prop","this","o","onChange","onEnd","interval","time","timer","counting","completed","currentTime","prototype","start","tick","pause","clearTimeout","reset","_this","setTimeout"],"mappings":"0OAOgB,SAAAA,EAAQC,EAAsBC,QAAA,IAAAA,IAAAA,EAAgB,GAE5D,IADA,IAAIC,EAAM,GAAKF,EACRE,EAAIC,OAASF,GAClBC,EAAM,IAAMA,EAEd,OAAOA,CACT,CAEA,IAAME,EAAS,IACTC,EAAS,GAAKD,EACdE,EAAO,GAAKD,EACZE,EAAM,GAAKD,EAQX,SAAUE,EAAcC,GAC5B,MAAO,CACLC,KAAMC,KAAKC,MAAMH,EAAYF,GAC7BM,MAAOF,KAAKC,MAAOH,EAAYF,EAAOD,GACtCQ,QAASH,KAAKC,MAAOH,EAAYH,EAAQD,GACzCU,QAASJ,KAAKC,MAAOH,EAAYJ,EAAUD,GAC3CY,aAAcL,KAAKC,MAAMH,EAAYL,GAEzC,CASgB,SAAAa,EAAYC,EAAgBC,GAEpC,IAAAT,EAAgDS,EAA5CT,KAAEG,EAA0CM,EAArCN,MAAEC,EAAmCK,EAA5BL,QAAEC,EAA0BI,EAAQJ,QAAzBC,EAAiBG,EAAQH,aA0B9D,OAxB8B,IAA1BE,EAAOE,QAAQ,MACjBP,GAAgB,GAAPH,EAETQ,EAASA,EAAOG,QAAQ,KAAMtB,EAAQW,KAGV,IAA1BQ,EAAOE,QAAQ,MACjBN,GAAmB,GAARD,EAEXK,EAASA,EAAOG,QAAQ,KAAMtB,EAAQc,KAGV,IAA1BK,EAAOE,QAAQ,MACjBL,GAAqB,GAAVD,EAEXI,EAASA,EAAOG,QAAQ,KAAMtB,EAAQe,KAGV,IAA1BI,EAAOE,QAAQ,MACjBJ,GAA0B,IAAVD,EAEhBG,EAASA,EAAOG,QAAQ,KAAMtB,EAAQgB,IAGjCG,EAAOG,QAAQ,MAAOtB,EAAQiB,EAAc,GACrD,CASgB,SAAAE,EAAOT,EAAmBa,GAExC,YAFwC,IAAAA,IAAAA,EAAoB,YAErDL,EAAYK,EADFd,EAAcC,GAEjC,CAEO,IAAMc,EAAO,WAAQ,SC7E5B,WASE,SAAAC,EAAYC,GAQV,IAAK,IAAMC,KAPXC,KAAKF,QAAUE,KAAKC,EAAI,CACtBC,SAAUN,EACVO,MAAOP,EACPQ,SAAU,IACVC,KAAM,GAGWP,EAEjBE,KAAKC,EAAEF,GAAQD,EAAQC,IAIE,iBAAhBC,KAAKC,EAAEI,MAAqBL,KAAKC,EAAEI,KAAO,KACnDL,KAAKC,EAAEI,KAAO,GAGhBL,KAAKM,MAAQ,KACbN,KAAKO,UAAW,EAChBP,KAAKQ,WAAY,EACjBR,KAAKS,YAAcT,KAAKC,EAAEI,IAC3B,CAwDH,OArDER,EAAAa,UAAAC,MAAA,WACMX,KAAKO,UAAYP,KAAKQ,YAI1BR,KAAKO,UAAW,EAChBP,KAAKY,SAIPf,EAAAa,UAAAG,MAAA,WACMb,KAAKO,WACPO,aAAad,KAAKM,OAClBN,KAAKO,UAAW,IAKpBV,EAAAa,UAAAK,MAAA,WACEf,KAAKa,QACLb,KAAKQ,WAAY,EACbR,KAAKS,cAAgBT,KAAKC,EAAEI,OAC9BL,KAAKS,YAAcT,KAAKC,EAAEI,KAC1BL,KAAKC,EAAEC,SAASF,KAAKS,eAIjBZ,EAAAa,UAAAE,KAAR,WAAA,IAoBCI,EAAAhB,KAnBOI,EAAWJ,KAAKC,EAAEG,SAExBJ,KAAKM,MAAQW,YAAW,WACtBD,EAAKP,aAAeL,EAEhBY,EAAKP,YAAc,IACrBO,EAAKP,YAAc,GAGrBO,EAAKf,EAAEC,SAASc,EAAKP,aAEI,IAArBO,EAAKP,aACPO,EAAKT,UAAW,EAChBS,EAAKR,WAAY,EACjBQ,EAAKf,EAAEE,SAEPa,EAAKJ,MAER,GAAER,IAGEP,EAAMN,OAAGA,EACTM,EAAahB,cAAGA,EAChBgB,EAAWP,YAAGA,EACdO,EAAOzB,QAAGA,EAClByB,CAAA"}
{
"name": "countdown-pro",
"version": "2.0.2",
"version": "2.0.3",
"description": "A simple countdown.",

@@ -5,0 +5,0 @@ "main": "dist/countdown.cjs.js",

import { format, parseTimeData, parseFormat, padZero } from './util';
type Options = {
export type Options = {
time: number;

@@ -4,0 +4,0 @@ interval?: number;