console
<template>
<div class="wrapper">
<div v-if="msTime.show">
<div class="auto-check">离系统自动签收还有</div>
<span v-if="tipShow">{{tipText}}</span>
<span v-if="!tipShow">{{tipTextEnd}}</span>
<span v-if="msTime.day>0"><span class="red">{{msTime.day}}</span><i>{{dayTxt}}</i></span>
<span class="red">{{msTime.hour}}</span><i>{{hourTxt}}</i>
<span class="red">{{msTime.minutes}}</span><i>{{minutesTxt}}</i>
<span class="red">{{msTime.seconds}}</span><i>{{secondsTxt}}</i>
</div>
<div v-if="!msTime.show">{{endText}}</div>
</div>
</template>
<script>
export default {
replace: true,
data () {
return {
tipShow: true,
msTime: {
show: false,
day: '',
hour: '',
minutes: '',
seconds: ''
},
star: '',
end: '',
current: ''
}
},
watch: {
currentTime: function (val, oldval) {
this.gogogo()
}
},
props: {
tipText: {
type: String,
default: '距离开始'
},
tipTextEnd: {
type: String,
default: '距离结束'
},
id: {
type: String,
default: '1'
},
currentTime: {
type: Number
},
startTime: {
type: Number
},
endTime: {
type: Number
},
endText: {
type: String,
default: '已结束'
},
dayTxt: {
type: String,
default: ':'
},
hourTxt: {
type: String,
default: ':'
},
minutesTxt: {
type: String,
default: ':'
},
secondsTxt: {
type: String,
default: ':'
},
secondsFixed: {
type: Boolean,
default: false
}
},
mounted () {
this.gogogo()
},
methods: {
gogogo: function () {
this.startTime.toString().length === 10 ? this.star = this.startTime * 1000 : this.star = this.startTime
this.endTime.toString().length === 10 ? this.end = this.endTime * 1000 : this.end = this.endTime
if (this.currentTime) {
this.currentTime.toString().length === 10 ? this.current = this.currentTime * 1000 : this.current = this.currentTime
} else {
this.current = (new Date()).getTime()
}
if (this.end < this.current) {
this.msTime.show = false
this.end_message()
} else if (this.current < this.star) {
this.$set(this, 'tipShow', true)
setTimeout(() => {
this.runTime(this.star, this.current, this.start_message)
}, 1)
} else if ((this.end > this.current && this.star < this.current) || this.star === this.current) {
this.$set(this, 'tipShow', false)
this.msTime.show = true
this.$emit('start_callback', this.msTime.show)
setTimeout(() => {
this.runTime(this.end, this.current, this.end_message, true)
}, 1)
}
},
runTime (startTime, endTime, callFun, type) {
let msTime = this.msTime
let timeDistance = startTime - endTime
if (timeDistance > 0) {
this.msTime.show = true
msTime.day = Math.floor(timeDistance / 86400000)
timeDistance -= msTime.day * 86400000
msTime.hour = Math.floor(timeDistance / 3600000)
timeDistance -= msTime.hour * 3600000
msTime.minutes = Math.floor(timeDistance / 60000)
timeDistance -= msTime.minutes * 60000
msTime.seconds = Math.floor(timeDistance / 1000).toFixed(0)
timeDistance -= msTime.seconds * 1000
let _s = Date.now()
let _e = Date.now()
let diffPerFunc = _e - _s
setTimeout(() => {
if (type) {
this.runTime(this.end, endTime += 1000, callFun, true)
} else {
this.runTime(this.star, endTime += 1000, callFun)
}
}, 1000 - diffPerFunc)
} else {
callFun()
}
},
start_message () {
this.$set(this, 'tipShow', false)
this.$emit('start_callback', this.msTime.show)
setTimeout(() => {
this.runTime(this.end, this.star, this.end_message, true)
}, 1)
},
end_message () {
this.msTime.show = false
if (this.currentTime <= 0) {
return
}
this.$emit('end_callback', this.msTime.show)
}
}
}
</script>
<style lang="scss">
i {
font-style: normal;
}
.red {
color: red;
}
.wrapper > div {
line-height: 0;
.auto-check {
margin-bottom: 16px;
}
}
</style>
### vue-countdown usage
```html
<count-down @start_callback="countDownS_cb(1)" @end_callback="countDownE_cb(1)" :currentTime="1481450106" :startTime="1481450110" :endTime="1481450115" :tipText="'距离开始文字1'" :tipTextEnd="'距离结束文字1'" :endText="'结束自定义文字2'" :dayTxt="'天'" :hourTxt="'小时'" :minutesTxt="'分'" :secondsTxt="'秒'"></count-down>
```
```js
import CountDown from 'vue-countdown'
components: {
CountDown
},
methods: {
countDownS_cb: function (x) {
console.log(x)
},
countDownE_cb: function (x) {
console.log(x)
}
}
```
### options
1. **currentTime** - 当前时间戳,如果不传,默认获取用户本地的时间(建议传服务器的当前时间)
- **type**: Number
- **required** : false
- **default** : (new Date()).getTime()
2. **startTime** - 开始时间戳
- **type**: Number
- **required** : true
3. **endTime** - 结束时间戳
- **type**: Number
- **required** : true
4. **tipText** - 开始倒计时之前的提示文字
- **type**: String
- **required** : false
- **default** : 距离开始
5. **tipTextEnd** - 开始倒计时之后的提示文字
- **type**: String
- **required** : false
- **default** : 距离结束
6. **endText** - 倒计时结束之后的提示文字
- **type**: String
- **required** : false
- **default** : 已结束
7. **dayTxt** - 自定义显示的天数文字
- **type**: String
- **required** : false
- **default** : :
8. **hourTxt** - 自定义显示的小时文字
- **type**: String
- **required** : false
- **default** : :
9. **secondsTxt** - 自定义显示的分钟文字
- **type**: String
- **required** : false
- **default** : :
10. **secondsFixed** - 自定义显示的秒数文字
- **type**: String
- **required** : false
- **default** : :
### callBack
1. **start_callback** - 开始倒计时结束之后的回调方法
- **type**: Function
- **required** : false
2. **end_callback** - 活动倒计时结束之后的回调方法
- **type**: Function
- **required** : false