首页 > 其他分享 >获取验证码倒计时

获取验证码倒计时

时间:2024-09-21 14:25:07浏览次数:6  
标签:countdown 验证码 intervalId 倒计时 获取 value loginForm

一般项目中获取验证码时,设置等待时间60s,倒计时结束之后才能继续重新获取

问题:一开始我只是给按钮设置了倒计时,以至于按钮是一次性的,只能获取一次,倒计时结束按钮恢复可点击状态,再点击之后按钮就不倒计时了...

原因:是因为我在编写计时器的时候没清除之前的计时器,没考虑到:如果获取验证码失败,计时器依然开始工作,造成定时器结束未销毁或倒计时未停止,造成再次点击不是从头开始

所以再进入新一轮计时时要清楚之前的计时器:

et intervalId = null
const startCountdown = () => {
  countdown.value = 60
  countdownActive.value = true
  if (intervalId) {//清空之前的定时器
    clearInterval(intervalId)
  }
  intervalId = setInterval(() => {
    if (countdown.value <= 0) {
      clearInterval(intervalId)
      intervalId = null
      countdown.value = 60
      countdownActive.value = false
    } else {
      countdown.value -= 1
    }
  }, 1000)
}

例子:

//获取短信验证码,限制等待一分钟再次获取

//定时器
let intervalId = null
const startCountdown = () => {
  countdown.value = 60
  countdownActive.value = true
  if (intervalId) {//清空之前的定时器
    clearInterval(intervalId)
  }
  intervalId = setInterval(() => {
    if (countdown.value <= 0) {
      clearInterval(intervalId)
      intervalId = null
      countdown.value = 60
      countdownActive.value = false
    } else {
      countdown.value -= 1
    }
  }, 1000)
}

//获取验证码
const handleVerify = async () => {
  if (!loginForm.account || !loginForm.captcha) {
    message.error("请先填写手机号和图形验证码");
  }else{
    let reqData = {
    phone: loginForm.account,
    code: loginForm.captcha,
    captchaId: loginForm.captchaId,
  };
  countdown.value = 60;
    countdownActive.value = true;
  try {
    let sendVerificationCodeUrl = `/user/sendVerificationCode`;
    let result = await axios.post(sendVerificationCodeUrl, reqData);
    //重置倒计时
    if (result.data.code == 200) {
      message.success("验证码已发送到" + loginForm.account);
    }
    startCountdown() //发送成功调用倒计时
  } catch (error) {
    console.log(error);
    message.error(error.response.data.msg);
    getCaptcha();
    countdownActive.value = false;
    loginForm.captcha = null;
  }
  }
  
};

 

标签:countdown,验证码,intervalId,倒计时,获取,value,loginForm
From: https://www.cnblogs.com/xz1005xfx/p/18423980

相关文章

  • Thinkphp8安装topthink/think-captcha验证码的和使用方法
    ThinkPHP8默认没有验证码,安装验证码可以使用composer来安装验证码一、安装验证码执行composer安装验证码composerrequiretopthink/think-captcha二、使用方法1、在目录app\middleware.php中开启session\think\middleware\SessionInit::class2、配置验证码安装好验证......
  • 痞子衡嵌入式:MCUBootUtility v6.3发布,支持获取与解析启动日志zi
    --痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v5.3.0)发布过去一年了,期间痞子衡也做过三个版本更新,但不足以单独介绍。这一次痞子衡为大家带来了全新重要版本v6.3.x,这次更新主要是想和大家特别聊聊ROM启动日志这个特性的支持。一、v6.0-v6.3更新记录--v5.......
  • 红队攻防 | 凭证获取的10个方法,零基础入门到精通,收藏这一篇就够了
    作为红队成员,就像许多其他APT一样,我们须找到通往目标网络和资产的方法,因此要付出大量努力,从我们可以获得的任何资源中获取登录凭证或令牌。这并不意味着我们只寻找登录特定服务的用户名和密码,在许多情况下,我们还需要寻找令牌,API密钥,甚至有效Cookie。特别是在采用最佳安全实......
  • 帝国CMS点击显示验证码如何调用?
    在帝国CMS中,显示验证码通常涉及以下几个步骤:加载必要的JavaScript文件、添加显示验证码的按钮和处理验证码的逻辑。下面是详细的步骤和示例代码:1.加载必要的JavaScript文件首先,确保页面加载了/e/data/js/ajax.js文件。这可以通过在HTML头部添加相应的<script>标签来实现。<......
  • 帝国CMS火车头错误:没有获取到任何分类列表
    当帝国CMS火车头采集插件出现“没有获取到任何分类列表”的错误时,通常是因为一些配置或设置上的问题。以下是一些排查和解决此类问题的步骤:1.检查火车头采集插件的配置打开火车头采集插件配置:进入帝国CMS后台管理系统,找到火车头采集插件的配置页面。检查分类ID:确保你选择的分......
  • 数字英文验证码识别 API 对接说明
    数字英文验证码识别API对接说明本文将介绍一种数字英文验证码识别API对接说明,它是基于深度学习技术,可用于识别变长英文数字验证码。输入验证码图像的内容,输出验证码结果。接下来介绍下数字英文验证码识别API的对接说明。注册试用链接注册试用链接申请流程要使......
  • Nextjs 中的高级数据获取技术
    next.js中的高级数据获取next.js提供了用于在应用程序中获取数据的强大功能,包括服务器端渲染(ssr)、静态站点生成(ssg)和客户端数据获取。通过利用这些技术,您可以构建高性能且可扩展的应用程序,从而提供无缝的用户体验。本指南将探索next.js中的高级数据获取技术,并演示如何......
  • 使用HTML+JS实现国庆节倒计时网页实例代码
    马上就是每年10月1日的国庆节了,为了增加节日氛围,许多网站会设置倒计时,以提醒人们国庆节的临近。本文站长工具网将介绍如何使用HTML和JavaScript创建一个简单的国庆节倒计时网页,并附上完整的实例代码供大家参考。1.网页设计基础在开始编写代码之前,我们需要了解一些基本的网......
  • HarmonyOS开发之获取视频缩略图
    在HarmonyOS多媒体应用开发中,视频缩略图的生成是一项常见的需求,尤其是在相册应用、视频播放器等场景中。HarmonyOSNEXT提供了丰富的API来帮助开发者轻松实现这一功能。本文将介绍如何使用getThumbnail和AVImageGenerator接口从原始媒体资源中获取视频指定时间的缩略图。场......
  • vue2实现监听usb接口的扫码器,获取扫码数据。
    原理扫码枪本质就是一个快速输入+回车(注意:扫码输入法要设置英文,不然会乱码)全局安装importscannerfrom'./install';Vue.use(scanner);使用exportdefault{data(){return{items:[],//扫码结果isStart:false//是否开启扫码}......