Vue3 获取验证码按钮,倒计时60s

在Vue组件中,如果你希望在倒计时结束后自动恢复按钮的可点击状态,你需要确保在倒计时结束时清除定时器,并将isDisabled状态重置为false

在代码中,startCountdown函数已经负责了减少remainingTime的值,并在它达到0时停止定时器。但是,由于isDisabled的状态是在handleClick函数中设置的,需要在startCountdown函数中或在某个监听器中(比如watchEffect,尽管在这个场景下不是必需的)来重置它。

不过,由于startCountdown已经足够处理停止定时器的逻辑,并且我们知道当remainingTime为0时应该重置isDisabled,我们可以在startCountdown函数内部处理这一点。这里是一个示例:

<template>
  <div>
    <el-button
      :disabled="isDisabled"
      :type="isDisabled ? 'text' : 'primary'"
      @click="handleClick"
    >
      {{ isDisabled ? `重新获取(${remainingTime}s)` : '获取验证码' }}
    </el-button>
  </div>
</template>

<script setup>
import { ref } from 'vue';

const remainingTime = ref(60);
const isDisabled = ref(false);
let timer = null;

// 倒计时函数
const startCountdown = () => {
  if (remainingTime.value > 0) {
    remainingTime.value--;
  } else {
    // 倒计时结束,清除定时器并重置isDisabled
    clearInterval(timer);
    timer = null;
    isDisabled.value = false;
    remainingTime.value = 60; // 如果需要再次点击时从60秒开始,可以保留这行代码
    // 如果不需要再次点击时重置倒计时,可以删除上面的remainingTime.value = 60;
  }
};

// 处理点击事件
const handleClick = () => {
  if (!isDisabled.value) {
    // 发送验证码的逻辑(这里只是模拟)
    console.log('验证码已发送');

    // 禁用按钮并开始倒计时
    isDisabled.value = true;
    timer = setInterval(startCountdown, 1000);
  }
};

// 在这个场景中,我们不需要额外的watchEffect来监听remainingTime,
// 因为startCountdown已经处理了所有必要的逻辑。
</script>

<style scoped>
/* 你的样式 */
</style>

startCountdown函数会在remainingTime达到0时自动清除定时器,并将isDisabled设置为false,从而恢复按钮的可点击状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值