Vue获取验证码倒计时60秒按钮详解

一、Vue验证码倒计时刷新

验证码是应用程序中常用的功能,倒计时60秒的按钮是验证码常见的实现方式。在Vue中,可以使用定时器来实现倒计时刷新。

首先,在Vue组件中声明一个变量代表剩余时间,该变量的初始值为60(表示60秒)。另外,还需要声明一个计时器,用于每隔一秒更新剩余时间,直到剩余时间为0。在计时器中,每一秒将剩余时间减1,同时更新显示在页面上的倒计时。

  <template>
    <button @click="refreshCode()" :disabled="disabled">{{ textBtn }}</button>
  </template>

  <script>
    export default {
      data() {
        return {
          remainingTime: 60,
          timer: null
        }
      },
      computed: {
        disabled() {
          return this.remainingTime !== 60;
        },
        textBtn() {
          return this.disabled ? `${this.remainingTime}秒后可重新发送` : '获取验证码';
        }
      },
      methods: {
        refreshCode() {
          this.remainingTime = 60;
          this.timer = setInterval(() => {
            this.remainingTime--;
            if (this.remainingTime === 0) clearInterval(this.timer);
          }, 1000);
        }
      },
      destroyed() {
        clearInterval(this.timer);
      }
    }
  </script>

在代码中,使用disabled来控制按钮是否可用。当剩余时间不为60秒时,按钮将变为灰色且无法点击,表示还需要等待一段时间才能重新发送验证码。同时,在计时器结束后需要清除计时器,否则计时器将一直运行下去。

二、Vue发送验证码倒计时

发送验证码倒计时与验证码倒计时刷新的实现方式较为相似,不同之处在于发送验证码需要调用后端API,而刷新验证码则是直接在前端更新剩余时间。

首先,在发送验证码的函数中,需要调用后端API并等待返回结果。当接收到成功的响应后,才开始启动倒计时计时器。与刷新验证码不同的是,在启动计时器之前,要将发送按钮禁用掉。另外,在计时器结束后,也要将按钮重新启用。

  <template>
    <button @click="sendCode()" :disabled="disabled">{{ textBtn }}</button>
  </template>

  <script>
    export default {
      data() {
        return {
          remainingTime: 60,
          timer: null,
          disabled: false
        }
      },
      computed: {
        textBtn() {
          return this.disabled ? `${this.remainingTime}秒后重新获取` : '获取验证码';
        }
      },
      methods: {
        async sendCode() {
          if (this.disabled) return;
          this.disabled = true;
          try {
            // 调用后端API发送验证码
            // 等待成功响应
            this.timer = setInterval(() => {
              this.remainingTime--;
              if (this.remainingTime === 0) {
                clearInterval(this.timer);
                this.disabled = false;
              }
            }, 1000);
          } catch (error) {
            // 出错处理
            this.disabled = false;
          }
        }
      },
      destroyed() {
        clearInterval(this.timer);
      }
    }
  </script>

三、Vue短信验证码倒计时

短信验证码是应用程序中常用的验证码类型之一。与获取验证码不同的是,短信验证码是通过手机平台发送而非后端API。同样,短信验证码倒计时也需要在发送成功后启动计时器。

前端代码如下:

  <template>
    <button @click="sendCode()" :disabled="disabled">{{ textBtn }}</button>
  </template>

  <script>
    export default {
      data() {
        return {
          remainingTime: 60,
          timer: null,
          disabled: false
        }
      },
      computed: {
        textBtn() {
          return this.disabled ? `${this.remainingTime}秒后重新获取` : '获取短信验证码';
        }
      },
      methods: {
        async sendCode() {
          if (this.disabled) return;
          this.disabled = true;
          try {
            // 调用手机平台API发送短信验证码
            // 等待发送成功
            this.timer = setInterval(() => {
              this.remainingTime--;
              if (this.remainingTime === 0) {
                clearInterval(this.timer);
                this.disabled = false;
              }
            }, 1000);
          } catch (error) {
            // 出错处理
            this.disabled = false;
          }
        }
      },
      destroyed() {
        clearInterval(this.timer);
      }
    }
  </script>

四、Vue实现验证码倒计时

实现验证码倒计时需要考虑到倒计时的场景和需要调用的API或函数。倒计时可以出现在多个地方,例如通过短信验证码登录、发送系统消息、重设密码等。因此,在实现验证码倒计时时应该尽量通用,方便在各种场景中复用。

首先,在Vue组件中声明一个计时器timer和一个剩余时间remainingTime。计时器用于定时更新剩余时间,剩余时间初始值为60。同时,还需要声明一个参数controlled,用于判断倒计时是否被控制。

在计时器中,每秒减1,直到为0。如果倒计时被控制,可以通过触发自定义事件来控制倒计时。在每次更新剩余时间时,判断剩余时间是否为0,如果为0则停止计时器。

  <template>
    <button @click="refreshCode()" :disabled="disabled">{{ remainingTime }}</button>
  </template>

  <script>
    export default {
      props: {
        controlled: {
          type: Boolean,
          default: false
        }
      },
      data() {
        return {
          remainingTime: 60,
          timer: null,
          disabled: true
        }
      },
      watch: {
        controlled(newVal) {
          if (newVal) clearInterval(this.timer);
          this.disabled = !newVal;
          this.remainingTime = 60;
        }
      },
      mounted() {
        if (!this.controlled) {
          this.timer = setInterval(() => {
            this.remainingTime--;
            if (this.remainingTime === 0) clearInterval(this.timer);
          }, 1000);
        }
      },
      methods: {
        refreshCode() {
          if (!this.controlled) return;
          this.$emit('refresh');
          clearInterval(this.timer);
          this.disabled = true;
          this.remainingTime = 60;
        }
      }
    }
  </script>

使用时,可以将controlled设置为true,并在父组件中监听组件的refresh事件即可控制倒计时的开始和结束。代码如下:

  <template>
    <div>
      <my-countdown :controlled="controlled" @refresh="resetCountdown" />
      <button @click="startCountdown">开始倒计时</button>
    </div>
  </template>

  <script>
    import MyCountdown from './MyCountdown.vue';

    export default {
      components: {
        MyCountdown
      },
      data() {
        return {
          controlled: false
        }
      },
      methods: {
        startCountdown() {
          this.controlled = true;
          setTimeout(() => {
            this.controlled = false;
          }, 5000);
        },
        resetCountdown() {
          this.controlled = false;
        }
      }
    }
  </script>

在上面的代码中,通过点击“开始倒计时”按钮来控制倒计时的开始和结束。当按钮被点击时,将controlled设置为true,此时倒计时组件将不会自动开始计时器,直到监听到了refresh事件,才会开始计数。5秒后我们又将controlled设置为false,此时组件又会变为自动计时的状态。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/158939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-19 18:56
下一篇 2024-11-19 18:56

相关推荐

  • Access执行按钮的实现方法及应用场景

    本文将详细介绍Access执行按钮的实现方法及其在实际应用场景中的使用方法。 一、创建Access执行按钮的方法 在Access中,创建执行按钮的方法非常简单。只需要按照以下步骤进…

    编程 2025-04-27
  • python运行按钮在哪

    Python运行按钮指的是在集成开发环境(IDE)中开发者用来运行代码的按钮,请看下面的代码示例: print(“Hello, World!”) 如果这段代码保存为名为hello_…

    编程 2025-04-27
  • 如何在LinearLayout中使按钮居中

    在LinearLayout布局中,如果想要让按钮居中,那么可以通过以下几种方法实现。 一、gravity属性 在LinearLayout中,可以使用gravity属性将其子控件相对…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论