Vue3+ElementPlus倒计时示例

  • 按钮文字默认显示"开始倒计时"
  • 当点击按钮时,显示正在倒计时(倒计时数字)
  • 倒计时结束按钮显示"开始倒计时"

倒计时逻辑 Hooks 函数

hooks/useCountDown.js

javascript 复制代码
/**
 * hooks函数:函数是用于封装和复用组件逻辑的一种机制
 * 定义:Hooks 是一种在不使用类组件的情况下复用状态逻辑的方法
 * 目的:将组件中的逻辑抽取出来,形成可复用的函数
 * 特点:遵循 Composition API 的思想,使逻辑组织更加灵活
 * 命名规范:通常以 use 开头命名 Hook 函数,如 useCounter、useFetch 等
 */
import {ref, watch} from "vue";

// 封装并导出倒计时函数
export function useCountDown(num = 60) {
  // 倒计时剩余秒数
  const count = ref(num);
  // 是否倒计时中
  const isDown = ref(false);
  // 定时器的 id 编号
  let timerId = null;
  // 开始倒计时函数
  const start = () => {
    if (isDown.value) return; //当前正在倒计时中,则返回
    isDown.value = true;      //设置 isDown 值,表示正在倒计时中
    timerId = setInterval(() => {
      count.value--;
    }, 1000);
  }
  // 使用 watch 监听 count 值,当 count 值变为 0 时,停止计时器
  watch(count, (newCount) => {
    if (newCount <= 0) {
      clearInterval(timerId); //清除计时器
      count.value = num;      //重置 count 值
      isDown.value = false;   //重置 isDown 值
    }
  })

  return {
    count,
    isDown,
    start
  }
}

页面按钮

xxx/index.vue

html 复制代码
<template>
  <el-button type="primary" @click="countDownFn">
    <span v-if="isDown">正在倒计时({{ count }})</span>
    <span v-else>开始倒计时</span>
  </el-button>
</template>

<script setup>
// 导入 hooks 函数
import { useCountDown } from "@/hooks"
// 调用 useCountDown 函数,得到 count计数, isDown是否开始, start 函数
const { count, isDown, start } = useCountDown(10)

// 倒计时
const countDownFn = () => {
  start()
}
</script>

<style lang="scss" scoped>
</style>
相关推荐
苦藤新鸡36 分钟前
27.合并有序链表,串葫芦
前端·javascript·链表
_OP_CHEN38 分钟前
【前端开发之HTML】(四)HTML 标签进阶:表格、表单、布局全掌握,从新手到实战高手!
前端·javascript·css·html·html5·网页开发·html标签
谢尔登1 小时前
Vue3底层原理——keep-alive
javascript·vue.js·ecmascript
Deca~1 小时前
VueVirtualLazyTree-支持懒加载的虚拟树
前端·javascript·vue.js
2501_944526421 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 主题切换实现
android·开发语言·javascript·python·flutter·游戏·django
爱上妖精的尾巴1 小时前
7-11 WPS JS宏 对象的属性值为函数的写法与用法
前端·javascript·wps·js宏·jsa
爱上妖精的尾巴1 小时前
7-12 WPS JS宏 this、return用构造函数自定义类-1:对象内部函数,外部调用的写法
前端·javascript·wps·js宏·jsa
白鳯1 小时前
分形世界:React实现交互式分形图绘制与导出
react.js·前端框架·cursor·分形·vibe coding·分形绘制·数学之美
har01d1 小时前
AI生成的 vue3 日历组件,显示农历与节日,日期可选择,年月可切换
前端·vue.js·节日