VUE组件日时分秒倒计时

因为产品说需要取服务器的时间戳,所以nowTime是从服务器取的当前时间戳,没有这个要求可以用new Date().getTime()代替;

组件代码

<template>
  <div class="DayDown">
    <span>{{ dayString }}</span>
    <span>{{ hourString }}</span>
    <span>{{ minuteString }}</span>
    <span>{{ secondString }}</span>
  </div>
</template>
<script>
export default {
  data () {
    return {
      day: '',
      hour: '',
      minute: '',
      second: '',
      promiseTimer: ''
    };
  },
  props: {
    endTime: {
      default: ''
    },
    nowTime: {
      default: ''
    }
  },
  watch: {
    endTime (val, old) {
      if (val !== old) {
        this.DayDown();
      }
    }
  },
  mounted () {
    this.DayDown();
  },
  methods: {
    DayDown () {
      clearInterval(this.promiseTimer);
      this.promiseTimer = setInterval(() => {
        const remainTime = this.endTime - this.nowTime;
        if (remainTime >= 0) {
          this.day = Math.floor(remainTime / (60 * 60 * 24));
          this.hour = Math.floor(remainTime / 60 / 60 % 24);
          this.minute = Math.floor((remainTime % 3600) / 60);
          this.second = Math.floor((remainTime % 3600) % 60);
          this.$emit('subtract');
        } else {
          this.day = 0;
          this.hour = 0;
          this.minute = 0;
          this.second = 0;
          this.$emit('end');
          clearInterval(this.promiseTimer);
        }
      }, 1000);
    },
    formatNum (num) {
      if (num) {
        return num < 10 ? '0' + num : '' + num;
      } else {
        return '00';
      }
    }
  },
  computed: {
    dayString () {
      return this.formatNum(this.day);
    },
    hourString () {
      return this.formatNum(this.hour);
    },
    minuteString () {
      return this.formatNum(this.minute);
    },
    secondString () {
      return this.formatNum(this.second);
    }
  }
};
</script>
<style scoped>
.DayDown span{
  padding: 5px;
  background-color: #000;
  color: #fff;
  border-radius: 4px;
}
</style>

父组件代码

<template>
  <div>
     <<day-down :endTime="info.startTime / 1000" v-if="info.endTime&& nowTime" @end="getSaleDetail" :nowTime="nowTime / 1000" @subtract="subtract"></day-down>
  </div>
</template>

<script>
import DayDown from '../components/DayDown.vue';
export default {
  components: { DayDown },
  data () {
    return {
        nowTime: null,
        info: {}
    };
  },

  mounted () {
  },

  methods: {
      // 传给组件的时间戳是秒
      // getSaleDetail是刷新数据方法
      // 减当前时间戳
      subtract () {
        this.nowTime += 1000;
      },
  }
};
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想要了解如何用Vue3实现时分秒倒计时功能。这可以通过以下步骤来完成: 1. 创建一个组件或页面,并在组件或页面中定义计时器需要用到的状态,如hours, minutes, seconds和isCountingDown等状态。 2. 在生命周期函数中启动计时器,例如在mounted钩子函数中使用setInterval函数定时更新状态中的hours、minutes和seconds数值。 3. 添加显示组件或页面,以显示倒计时,并在页面或组件的模板中绑定状态数据。 4. 创建倒计时方法,使其在用户输入倒计时时间后启动,并在倒计时过程中修改状态,例如计时器到达00:00:00时,自动结束计时。 下面是一个简单的示例代码: ``` <template> <div class="countdown-timer"> <div>{{ formattedTime }}</div> <button @click="toggleCountdown">{{ isCountingDown ? 'Stop' : 'Start' }}</button> </div> </template> <script> import { reactive } from 'vue' export default { name: 'CountdownTimer', setup() { const state = reactive({ hours: 0, minutes: 0, seconds: 0, isCountingDown: false, countdownTimer: null, }) const formatTime = (time) => (time < 10 ? `0${time}` : time) const countdown = () => { if (state.seconds === 0) { if (state.minutes === 0) { if (state.hours === 0) { clearInterval(state.countdownTimer) state.isCountingDown = false // Do something when countdown is completed } else { state.hours-- state.minutes = 59 state.seconds = 59 } } else { state.minutes-- state.seconds = 59 } } else { state.seconds-- } } const toggleCountdown = () => { if (!state.isCountingDown) { state.countdownTimer = setInterval(countdown, 1000) state.isCountingDown = true } else { clearInterval(state.countdownTimer) state.isCountingDown = false } } const formattedTime = computed(() => { const { hours, minutes, seconds } = state return `${formatTime(hours)}:${formatTime(minutes)}:${formatTime(seconds)}` }) return { state, formattedTime, toggleCountdown, } }, } </script> ``` 在这个代码示例中,我们使用Vue3的reactive函数定义计时器需要用到的状态,以及countdown方法和toggleCountdown方法。在组件或页面的模板中,我们绑定了formattedTime计算属性和toggleCountdown方法,使用户可以启动或停止倒计时。 总的来说,实现一个简单的时分秒倒计时功能并不复杂,只需要通过定义状态、创建计时器和绑定模板的方式来完成即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值