基于vue的短信验证码倒计时

本文介绍了一种使用Vue实现的倒计时按钮组件,该组件适用于短信验证码等场景。通过改变按钮状态展示不同文本,并利用定时器实现倒计时功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做了一个小的demo,分享给大家,在很多地方都能用到。

一般获取短信验证码的时候会用到这个demo:

el-button里面包两个span标签,根据点击状态,显示不同的span,关键代码就是倒计时:

<el-button  type="primary" class="code_btn" style="background: #fff;color: #000;border: 1px solid #999;float: right;margin-top: 10px;" @click.native.prevent="getMessageCode('formData')" :loading="logining">
            <span v-if="!sendMsgDisabled">获取验证码</span>
            <span v-if="sendMsgDisabled">{{codeTime+'秒后获取'}}</span>
          </el-button>

data里设置初始数据:

codeTime: 59, // 发送验证码倒计时
sendMsgDisabled: false, // 是否显示获取验证码按钮

在发送短信验证码接口请求的成功回调函数里:

_this.sendMsgDisabled = true;
 let codeInterval = window.setInterval(function() {
     if ((_this.codeTime--) <= 0) {
           _this.codeTime = 59;
           _this.sendMsgDisabled = false;
           window.clearInterval(codeInterval);
      }
  }, 1000);

​

好了 一个简单的vue倒计时demo效果已经实现了,核心代码是定时器里面,codeTime为0时即倒计时结束,初始化codeTime及切换按钮的显示状态。

### 关于 Spring Boot 和 Vue验证码生成的实现 在构建基于 Spring Boot 和 Vue 的应用时,为了增强系统的安全性,通常会加入验证码机制。这可以通过多种方式来完成,比如短信验证码[^2]、邮箱验证码[^4]以及图形或滑动模块验证码[^5]。 #### 后端部分 (Spring Boot) 对于后端而言,在 `pom.xml` 文件中添加必要的依赖项是第一步操作: ```xml <dependencies> <!-- 验证码发送服务所需的验证支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- 如果涉及邮件发送,则需此依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- Redis缓存用于保存临时验证码 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> ``` 接着定义一个简单的 RESTful API 来处理验证码请求。这里以电子邮件为例展示如何创建这样的接口: ```java @RestController @RequestMapping("/api/v1/auth") public class EmailController { @Autowired private JavaMailSender emailSender; /** * 发送带有随机验证码的邮件给指定地址。 */ @PostMapping("/send-email-code") public ResponseEntity<String> sendEmailCode(@RequestParam String emailAddress) { try { // 生成六位数随机验证码 int code = new Random().nextInt(899999) + 100000; MimeMessage message = emailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo(emailAddress); helper.setSubject("您的验证码"); helper.setText(String.format("您好,\n\n这是您申请的服务验证码:%d", code)); emailSender.send(message); // 将验证码存储到Redis中以便后续校验 redisTemplate.opsForValue().set(emailAddress, Integer.toString(code), Duration.ofMinutes(5)); return ResponseEntity.ok("已成功发送验证码至 " + emailAddress); } catch (MessagingException e) { throw new RuntimeException(e.getMessage()); } } } ``` 上述代码片段实现了向用户提供电子邮箱地址的情况下发送包含唯一验证码的消息,并将其短暂地储存在 Redis 缓存里等待进一步确认。 #### 前端部分 (Vue.js) 前端方面则主要负责发起获取验证码的 HTTP 请求并将结果显示出来供用户查看。下面是一个简化版的例子说明怎样利用 Axios 库来进行网络通信: ```javascript // main.js 或者相应的入口文件 import axios from 'axios'; Vue.prototype.$http = axios; // 组件内调用方法 methods: { async requestVerificationCode() { const response = await this.$http.post('/api/v1/auth/send-email-code', null, { params: { emailAddress: this.email } }); alert(response.data); // 显示服务器返回的信息 console.log('Response:', response); }, }, ``` 此外还可以考虑集成一些 UI 框架如 ElementUI 提供更友好的交互体验,例如倒计时按钮防止频繁点击触发过多次请求等特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值