123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- Component({
- properties: {
- target: Number,
- showDay: Boolean,
- callback: String,
- format: Array,
- clearTimer: Boolean
- },
- externalClasses: ['countdown-class'],
- data: {
- time: '',
- resultFormat: [],
- changeFormat: false
- },
- ready() {
- this.getFormat();
- },
- methods: {
- getFormat() {
- const data = this.data;
- const len = data.format.length;
- if (!data.showDay) data.resultFormat.push('');
- if (len >= 3) {
- for (let i = 0; i < len; i++) {
- if (data.resultFormat.length >= 4) break;
- if (data.format[i]) {
- data.resultFormat.push(data.format[i].toString());
- }
- }
- if (data.resultFormat.length >= 4) data.changeFormat = true;
- }
- this.getLastTime();
- },
- init() {
- const self = this;
- setTimeout(function () {
- self.getLastTime.call(self);
- }, 1000);
- },
- getLastTime() {
- const data = this.data;
- const gapTime = Math.ceil((data.target - new Date().getTime()) / 1000);
- let result = '';
- let time = '00:00:00';
- let day = '00';
- const format = data.resultFormat;
- if (gapTime > 0) {
- day = this.formatNum(parseInt(gapTime / 86400));
- let lastTime = gapTime % 86400;
- const hour = this.formatNum(parseInt(lastTime / 3600));
- lastTime = lastTime % 3600;
- const minute = this.formatNum(parseInt(lastTime / 60));
- const second = this.formatNum(lastTime % 60);
- if (data.changeFormat) time = `${hour}${format[1]}${minute}${format[2]}${second}${format[3]}`;
- else time = `${hour}:${minute}:${second}`;
- if (!data.clearTimer) this.init.call(this);
- } else {
- this.endfn();
- }
- if (data.showDay) {
- if (data.changeFormat) {
- result = `${day}${format[0]} ${time}`;
- } else {
- result = `${day}d ${time}`;
- }
- } else {
- result = time;
- }
- this.setData({
- time: result
- });
- },
- formatNum(num) {
- return num > 9 ? num : `0${num}`;
- },
- endfn() {
- this.triggerEvent('callback', {});
- }
- }
- });
|