vue结合dayjs和@vueuse/core中的useIntervalFn实现格式化倒计时功能

139 篇文章 1 订阅

1、首先安装环境

npm install dayjs -s
npm i @vueuse/core -s

2、新建一个conform.js其内容如下:

import {onUnmounted, ref} from "vue";
import {useIntervalFn} from "@vueuse/core";
import dayjs from "dayjs";

export const usePayTime = () => {
    // 倒计时逻辑
    const time = ref(0)
    const timeText = ref('')
    const { pause, resume } = useIntervalFn(() => {
        time.value--
        console.log('time.value', time.value)

        timeText.value = dayjs.unix(time.value).format('mm分ss秒')
        // timeText.value = dayjs.unix(time.value).format('HH小时mm分ss秒')
        // timeText.value = dayjs.unix(time.value).format('DD天HH小时mm分ss秒')
        if (time.value <= 0) {
            pause()
        }
    }, 1000, false)
    onUnmounted(() => {
        pause()
    })

    // 开启定时器 countdown 倒计时时间
    const start = (countdown) => {
        time.value = countdown
        timeText.value = dayjs.unix(time.value).format('mm分ss秒')
        // timeText.value = dayjs.unix(time.value).format('HH小时mm分ss秒')
        // timeText.value = dayjs.unix(time.value).format('DD天HH小时mm分ss秒')
        resume()
    }

    return {
        start,
        timeText
    }
}

3、在APP.vue 中使用,其内容如下:

<template>
  <button  @click="validate_ref">开始倒计时</button>
  <div>
    {{timeText}}
  </div>
</template>

<script setup>
import { ref} from "vue";
import {usePayTime} from './conform'
// 若显示到分钟
const total_seconds = ref(60*2)
// 60*60*2
// 若显示到的是小时数则用这种
// const total_seconds = ref(7200-28800)
// 172800 = 24*60*60*2 即两天
// 若显示到的是天数,就要用下边这种
// const total_seconds = ref(172800-28800-86400)
const { start, timeText } = usePayTime()
const minus = 60
const hours = minus*60
const days = hours*24
const noday = ref(172800)
const day = parseInt(noday.value/days)
const hour = parseInt((noday.value%days)/hours)
const min = parseInt((noday.value%hours)/minus)
const second = parseInt(noday.value%minus)

console.log('day', day)
console.log('hour', hour)
console.log('min', min)
console.log('second', second)
const validate_ref = ()=>{
  start(total_seconds.value)
  // start()
}
</script>
<style scoped lang="less">
</style>

4、效果如下:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值