countdown-pro
Advanced tools
@@ -22,2 +22,3 @@ 'use strict'; | ||
| var DAY = 24 * HOUR; | ||
| var mathFloor = Math.floor; | ||
| /** | ||
@@ -31,7 +32,7 @@ * 解析时间戳 | ||
| return { | ||
| days: Math.floor(timestamp / DAY), | ||
| hours: Math.floor((timestamp % DAY) / HOUR), | ||
| minutes: Math.floor((timestamp % HOUR) / MINUTE), | ||
| seconds: Math.floor((timestamp % MINUTE) / SECOND), | ||
| milliseconds: Math.floor(timestamp % SECOND) | ||
| days: mathFloor(timestamp / DAY), | ||
| hours: mathFloor((timestamp % DAY) / HOUR), | ||
| minutes: mathFloor((timestamp % HOUR) / MINUTE), | ||
| seconds: mathFloor((timestamp % MINUTE) / SECOND), | ||
| milliseconds: mathFloor(timestamp % SECOND) | ||
| }; | ||
@@ -97,5 +98,10 @@ } | ||
| }; | ||
| for (var prop in options) { | ||
| // @ts-ignore | ||
| this.o[prop] = options[prop]; | ||
| if (typeof options === 'object') { | ||
| for (var prop in options) { | ||
| // @ts-ignore | ||
| if (options[prop] !== undefined) { | ||
| // @ts-ignore | ||
| this.o[prop] = options[prop]; | ||
| } | ||
| } | ||
| } | ||
@@ -102,0 +108,0 @@ // 倒计时长 |
@@ -20,2 +20,3 @@ /** | ||
| var DAY = 24 * HOUR; | ||
| var mathFloor = Math.floor; | ||
| /** | ||
@@ -29,7 +30,7 @@ * 解析时间戳 | ||
| return { | ||
| days: Math.floor(timestamp / DAY), | ||
| hours: Math.floor((timestamp % DAY) / HOUR), | ||
| minutes: Math.floor((timestamp % HOUR) / MINUTE), | ||
| seconds: Math.floor((timestamp % MINUTE) / SECOND), | ||
| milliseconds: Math.floor(timestamp % SECOND) | ||
| days: mathFloor(timestamp / DAY), | ||
| hours: mathFloor((timestamp % DAY) / HOUR), | ||
| minutes: mathFloor((timestamp % HOUR) / MINUTE), | ||
| seconds: mathFloor((timestamp % MINUTE) / SECOND), | ||
| milliseconds: mathFloor(timestamp % SECOND) | ||
| }; | ||
@@ -95,5 +96,10 @@ } | ||
| }; | ||
| for (var prop in options) { | ||
| // @ts-ignore | ||
| this.o[prop] = options[prop]; | ||
| if (typeof options === 'object') { | ||
| for (var prop in options) { | ||
| // @ts-ignore | ||
| if (options[prop] !== undefined) { | ||
| // @ts-ignore | ||
| this.o[prop] = options[prop]; | ||
| } | ||
| } | ||
| } | ||
@@ -100,0 +106,0 @@ // 倒计时长 |
@@ -26,2 +26,3 @@ (function (global, factory) { | ||
| var DAY = 24 * HOUR; | ||
| var mathFloor = Math.floor; | ||
| /** | ||
@@ -35,7 +36,7 @@ * 解析时间戳 | ||
| return { | ||
| days: Math.floor(timestamp / DAY), | ||
| hours: Math.floor((timestamp % DAY) / HOUR), | ||
| minutes: Math.floor((timestamp % HOUR) / MINUTE), | ||
| seconds: Math.floor((timestamp % MINUTE) / SECOND), | ||
| milliseconds: Math.floor(timestamp % SECOND) | ||
| days: mathFloor(timestamp / DAY), | ||
| hours: mathFloor((timestamp % DAY) / HOUR), | ||
| minutes: mathFloor((timestamp % HOUR) / MINUTE), | ||
| seconds: mathFloor((timestamp % MINUTE) / SECOND), | ||
| milliseconds: mathFloor(timestamp % SECOND) | ||
| }; | ||
@@ -101,5 +102,10 @@ } | ||
| }; | ||
| for (var prop in options) { | ||
| // @ts-ignore | ||
| this.o[prop] = options[prop]; | ||
| if (typeof options === 'object') { | ||
| for (var prop in options) { | ||
| // @ts-ignore | ||
| if (options[prop] !== undefined) { | ||
| // @ts-ignore | ||
| this.o[prop] = options[prop]; | ||
| } | ||
| } | ||
| } | ||
@@ -106,0 +112,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\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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"} | ||
| {"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\nconst mathFloor = Math.floor;\n\n/**\n * 解析时间戳\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @returns 包含日/时/分/秒/毫秒的对象\n */\nexport function parseTimeData(timestamp: number) {\n return {\n days: mathFloor(timestamp / DAY),\n hours: mathFloor((timestamp % DAY) / HOUR),\n minutes: mathFloor((timestamp % HOUR) / MINUTE),\n seconds: mathFloor((timestamp % MINUTE) / SECOND),\n milliseconds: mathFloor(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 if (typeof options === 'object') {\n for (const prop in options) {\n // @ts-ignore\n if (options[prop] !== undefined) {\n // @ts-ignore\n this.o[prop] = options[prop];\n }\n }\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.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}()})); | ||
| !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,r=Math.floor;function s(t){return{days:r(t/o),hours:r(t%o/n),minutes:r(t%n/i),seconds:r(t%i/e),milliseconds:r(t%e)}}function u(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 c(t,e){return void 0===e&&(e="HH:mm:ss"),u(e,s(t))}var m=function(){};return function(){function e(t){if(this.options=this.o={onChange:m,onEnd:m,interval:1e3,time:0},"object"==typeof t)for(var e in t)void 0!==t[e]&&(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=c,e.parseTimeData=s,e.parseFormat=u,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\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"} | ||
| {"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\nconst mathFloor = Math.floor;\n\n/**\n * 解析时间戳\n *\n * @param {number} timestamp 时间戳,单位毫秒\n * @returns 包含日/时/分/秒/毫秒的对象\n */\nexport function parseTimeData(timestamp: number) {\n return {\n days: mathFloor(timestamp / DAY),\n hours: mathFloor((timestamp % DAY) / HOUR),\n minutes: mathFloor((timestamp % HOUR) / MINUTE),\n seconds: mathFloor((timestamp % MINUTE) / SECOND),\n milliseconds: mathFloor(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 if (typeof options === 'object') {\n for (const prop in options) {\n // @ts-ignore\n if (options[prop] !== undefined) {\n // @ts-ignore\n this.o[prop] = options[prop];\n }\n }\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","mathFloor","Math","floor","parseTimeData","timestamp","days","hours","minutes","seconds","milliseconds","parseFormat","format","timeData","indexOf","replace","pattern","noop","CountDown","options","this","o","onChange","onEnd","interval","time","prop","undefined","timer","counting","completed","currentTime","prototype","start","tick","pause","clearTimeout","reset","_this","setTimeout"],"mappings":"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"} |
+1
-1
| { | ||
| "name": "countdown-pro", | ||
| "version": "2.0.3", | ||
| "version": "2.0.4", | ||
| "description": "A simple countdown.", | ||
@@ -5,0 +5,0 @@ "main": "dist/countdown.cjs.js", |
42786
2.65%560
3.51%