当前位置: 首页 > article >正文

短信验证码倒计时 (直接复制即可使用) vue3

需求:

要实现一个获取验证码的需求,点击获取验证码60秒内不可以重复点击,方式有两种可以直接复制使用;

效果图

在这里插入图片描述

实现方案

方案1 (单个文件内使用比较推荐)

<el-button :disabled="codeDisabled" @click.stop="handleSendCode">
  <span>{{ codeDisabled ? `重新发送 ${countdown}` : '获取验证码' }} </span>
</el-button>

  
  // 是否禁用按钮
const codeDisabled = ref(false)
// 倒计时秒数
const countdown = ref(60)

// 点击获取验证码
const handleSendCode = () => {
  codeDisabled.value = true
  const interval = setInterval(() => {
    countdown.value -= 1;
    if (countdown.value <= 0) {
      clearInterval(interval)
      codeDisabled.value = false
    }
  }, 1000)
}

方案2 (自定义hook 多个文件使用推荐)

  1. 首先,创建一个新的文件,例如 useCountdown.ts

// useCountdown.ts
import { ref } from 'vue';

export function useCountdown(initialTime = 5) {
  const codeDisabled = ref(false);
  const countdown = ref(initialTime);

  const startCountdown = () => {
    codeDisabled.value = true;
    countdown.value = initialTime;
    
    const interval = setInterval(() => {
      countdown.value -= 1;
      if (countdown.value <= 0) {
        clearInterval(interval);
        codeDisabled.value = false;
      }
    }, 1000);
  };

  return {
    codeDisabled,
    countdown,
    startCountdown
  };
}

  1. 组件中使用这个自定义组合函数
<template>
  <el-button :disabled="codeDisabled" @click.stop="handleSendCode">
    <span>
      {{ codeDisabled ? `重新发送 ${countdown}` : '获取验证码' }}
    </span>
  </el-button>
</template>
// 导入
import { useCountdown } from './useCountdown';
// 解构
const { codeDisabled, countdown, startCountdown } = useCountdown(5);

// 按钮点击事件
const handleSendCode = () => {
      startCountdown();
    };



http://www.kler.cn/news/308263.html

相关文章:

  • 今日leetCode 242.有效的字母异位词
  • 【二叉树进阶】二叉搜索树
  • 视频格式转为mp4(使用ffmpeg)
  • 小程序面试题八
  • 【百日算法计划】:每日一题,见证成长(014)
  • 【SQL Server】清除日志文件ERRORLOG、tempdb.mdf
  • 如何快准稳 实现MySQL大表历史数据迁移?
  • linux文件系统权限详解
  • 服务器——装新的CUDA版本的方法
  • Web:HTTP包的相关操作
  • RocksDB系列一:基本概念
  • flink实战--如何基于java-agent技术增强Flink功能
  • 【Hot100】LeetCode—4. 寻找两个正序数组的中位数
  • 简单易懂的变动率指标ROC,做短线的快来了解一下
  • 超链接/表格/表单的复习(课后作业)
  • 蓝桥杯DS18B20程序源码
  • 【数据结构】4——树和森林
  • Mastering openFrameworks_第十一章_网络
  • 身份识别与服装类型检测系统源码分享
  • 基于微信小程序图书馆自习室座位预约小程序
  • USB组合设备——串口+鼠标+键盘
  • WPS生成目录
  • OpengGL教程(六)---坐标的变换和坐标系的变换
  • 文献多\bibliographystyle和文献少\begin{thebibliography}
  • 【JAVA】数据脱敏技术(对称加密算法、非对称加密算法、哈希算法、消息认证码(MAC)算法、密钥交换算法)使用方法
  • JUC学习笔记(二)
  • sed编辑器与awk的用法
  • 0917np.power()
  • 径向基函数神经网络RBFNN案例实操
  • 人工智能GPT____豆包使用的一些初步探索步骤 体验不一样的工作