| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <template>
- <div class="count-down">
- <slot>
- {{content}}
- </slot>
- </div>
- </template>
- <script>
- export default {
- data() {
- return {
- content: '',
- }
- },
- props: {
- endTime: {
- type: Number,
- default: 0
- },
- endText: {
- type: String,
- default: ''
- },
- callback: {
- type: Function,
- default: null
- }
- },
- mounted() {
- this.countdowm(this.endTime)
- },
- methods: {
- countdowm(timestamp) {
- let self = this;
- let timer = setInterval(function () {
- let nowTime = new Date();
- let endTime = new Date(timestamp * 1000);
- let t = endTime.getTime() - nowTime.getTime();
- if (t > 0) {
- let day = Math.floor(t / 86400000);
- let hour = Math.floor((t / 3600000) % 24);
- let min = Math.floor((t / 60000) % 60);
- let sec = Math.floor((t / 1000) % 60);
- hour = hour < 10 ? "0" + hour : hour;
- min = min < 10 ? "0" + min : min;
- sec = sec < 10 ? "0" + sec : sec;
- let format = '';
- if (day > 0) {
- format = `${day}天${hour}小时${min}分${sec}秒`;
- }
- if (day <= 0 && hour > 0) {
- format = `${hour}小时${min}分${sec}秒`;
- }
- if (day <= 0 && hour <= 0) {
- format = `${min}分${sec}秒`;
- }
- self.content = self.endText + ' ' + format;
- } else {
- clearInterval(timer);
- self.content = '';
- self._callback();
- }
- }, 1000);
- },
- _callback() {
- if (this.callback && this.callback instanceof Function) {
- this.callback(...this);
- }
- }
- }
- }
- </script>
- <style lang="scss" rel="stylesheet/scss" scoped>
- .count-down {
- margin: 10px;
- color: $red;
- }
- </style>
|