获取验证码倒计时

news/2024/9/21 14:24:35

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

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

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

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

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

例子:

//获取短信验证码,限制等待一分钟再次获取//定时器
let intervalId = null
const startCountdown = () => {countdown.value = 60countdownActive.value = trueif (intervalId) {//清空之前的定时器clearInterval(intervalId)}intervalId = setInterval(() => {if (countdown.value <= 0) {clearInterval(intervalId)intervalId = nullcountdown.value = 60countdownActive.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;}}};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/62930.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

城市道路积水识别监测系统

城市道路积水识别监测系统基于机器视觉分析,城市道路积水识别监测系统实时识别街道路面积水情况,对严重积水时立即报警。城市道路积水识别监测系统对低洼区域进行实时监测,一旦城市道路积水识别监测系统监测到街道路面积水时,立即进行抓拍告警,告知监控管理中心,提醒相关…

Thinkphp8安装topthink/think-captcha验证码的和使用方法

ThinkPHP8默认没有验证码,安装验证码可以使用composer来安装验证码 一、安装验证码 执行composer安装验证码 composer require topthink/think-captcha二、使用方法 1、在目录app\middleware.php中开启session \think\middleware\SessionInit::class 2、配置验证码 安装好验证…

水尺监测识别系统

水尺监测识别系统利用计算机视觉+机器学习技术对河道湖泊进行实时检测,当水尺监测识别系统监测到河道水位异常时,立即告警。水尺监测识别系统同时将告警截图和视频保存下来,推送给后台。水尺监测识别系统极大提升现场区域的管控效率,既方便又节省人力。水尺监测识别系统利用…

人员规范操作行为识别系统

人员规范操作行为识别系统对现场人员操作行为进行实时监测分析,如果人员规范操作行为识别系统发现现场人员未按照要求规范进行操作、遗漏操作步骤更改先后作业顺序或者操作不规范,人员规范操作行为识别系统立即抓拍存档现场语音播报提醒相关人员行为不规范请立即改正,并同步…

皮带跑偏检测系统

皮带跑偏检测系统对煤矿皮带运行状态进行全天候实时监测,一旦皮带跑偏检测系统监测到现场皮带跑偏、撕裂、堆煤、异物等异常情况时,皮带跑偏检测系统马上开展警报,通知监督管理办公室,并提醒负责人及时处置。皮带跑偏检测系统并把警报截屏和视频储存到数据库系统系统中生成…

单调栈-滑动窗口

830. 单调栈 模板题: 给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。 输入格式 第一行包含整数 N,表示数列长度。 第二行包含 N 个整数,表示整数数列。 输出格式 共一行,包含 NN 个整数,其中第 i 个数表示第 i 个数的左边第一个比…

人员离岗自动识别系统

人员离岗自动识别系统依据深度学习机器视觉技术,人员离岗自动识别系统能够自动识别岗位上是否人员存在。一旦发现人员在作业时间不在位置上,人员离岗自动识别系统会立即抓拍报警,并把报警记录同步到后台,通过现场语音摄像机给出语音提示,让人员及时返回岗位。通过现场语音…

怎么查看数据库的用户名和密码

查看数据库的用户名和密码取决于你使用的数据库管理系统(DBMS)以及你所拥有的权限。以下是几种常见数据库系统中查看用户名和密码的方法: MySQL 对于MySQL数据库,如果你有足够的权限,可以通过查询mysql.user表来查看用户列表及其相关信息。密码是以哈希形式存储的,不能直…