vue倒计时功能组件,可天时分秒倒计时
创建一个Vue倒计时功能组件涉及到使用Vue的响应式系统和定时器。以下是一个简单的Vue倒计时组件示例,它接受一个结束时间,并从那时开始倒计时,可以实现天、时、分、秒倒计时。

首先,创建一个名为CountdownTimer.vue的新文件:
<template>
<div class="countdown-timer">
<p>{{ days }}天, {{ hours }}小时, {{ minutes }}分钟, {{ seconds }}秒</p>
</div>
</template>
<script>
export default {
name: 'CountdownTimer',
props: {
endTime: {
type: Number,
required: true
}
},
data() {
return {
days: 0,
hours: 0,
minutes: 0,
seconds: 0
};
},
mounted() {
this.interval = setInterval(() => {
this.tick();
}, 1000);
},
beforeDestroy() {
clearInterval(this.interval);
},
methods: {
tick() {
const now = Date.now();
const distance = this.endTime - now;
if (distance < 0) {
this.clearTimer();
this.days = this.hours = this.minutes = this.seconds = 0;
return;
}
this.days = Math.floor(distance / (1000 * 60 * 60 * 24));
const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
this.hours = hours < 10 ? '0' + hours : hours;
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
this.minutes = minutes < 10 ? '0' + minutes : minutes;
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
this.seconds = seconds < 10 ? '0' + seconds : seconds;
},
clearTimer() {
clearInterval(this.interval);
}
}
};
</script>
<style scoped>
.countdown-timer p {
/* 你的样式 */
}
</style>在这个组件中:
- 我们定义了一个props,名为endTime,它是一个数字类型,表示倒计时结束的Unix时间戳(毫秒)。
- 我们使用data来存储倒计时的天、小时、分钟和秒。
- 在mounted生命周期钩子中,我们设置了一个定时器,每秒调用一次tick方法。
- 在beforeDestroy生命周期钩子中,我们清除定时器以防止内存泄漏。
- tick方法计算当前时间与结束时间之间的差值,并据此更新天、小时、分钟和秒。
- 如果倒计时结束,我们调用clearTimer方法来清除定时器,并重置倒计时数值。
使用这个组件时,你需要传入一个endTime属性,例如:
<template>
<div>
<countdown-timer :endTime="endTime"></countdown-timer>
</div>
</template>
<script>
import CountdownTimer from './CountdownTimer.vue';
export default {
components: {
CountdownTimer
},
data() {
return {
endTime: new Date('2024-12-31').getTime() // 设置结束时间
};
}
};
</script>请确保你将endTime设置为一个有效的Unix时间戳(毫秒),并且它代表你希望倒计时结束的日期和时间。这个组件会从那个时间开始倒计时,并实时更新。
除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址:https://tangjiusheng.cn/vue/14631.html
原文地址:https://tangjiusheng.cn/vue/14631.html
