您的位置:

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,此时组件又会变为自动计时的状态。

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

2023-05-20
Vue获取验证码倒计时60秒按钮详解

2023-05-20
Vue倒计时组件详解

2023-05-17
js倒计时代码按钮,js倒计时10秒按钮

本文目录一览: 1、点击按钮出现60秒倒计时的简单js代码(推荐) 2、JS 倒计时实现代码(时、分,秒) 3、网页点击按钮开始一小时倒计时的JavaScript代码 点击按钮出现60秒倒计时的简单j

2023-12-08
JavaScript验证码倒计时

2023-05-18
Vue倒计时详解

2023-05-20
如何设计滑动验证码倒计时,提升用户注册体验

2023-05-19
分享一个js倒计时代码,js写一个倒计时

本文目录一览: 1、JS 5秒倒计时的代码怎么写?时间要实时显示在屏幕上的。 2、点击按钮出现60秒倒计时的简单js代码(推荐) 3、求一个倒计时js代码,非常简单的 4、Js倒计时代码精确到毫秒。

2023-12-08
js实现的倒计时按钮实例(js倒计时函数)

本文目录一览: 1、JS 倒计时实现代码(时、分,秒) 2、JQuery实现的按钮倒计时效果 3、js实现拍简单倒计时功能 4、用javascript实现:点击按钮后,页面出现倒计时,并开始倒计时 J

2023-12-08
JS倒计时10秒的完整实现及应用

2023-05-17
js倒计时代码时分秒,js秒数倒计时

本文目录一览: 1、js倒计时代码的问题 2、求一个倒计时js代码,非常简单的 3、时间倒计时代码 4、用js写倒计时~但规定要用以下代码~求助 js倒计时代码的问题 var now = new Da

2023-12-08
vue 倒计时组件详解

2023-05-22
一个倒计时的js代码(一个倒计时的js代码是多少)

本文目录一览: 1、用js写倒计时~但规定要用以下代码~求助 2、JS 5秒倒计时的代码怎么写?时间要实时显示在屏幕上的。 3、帮忙改一个js倒计时代码 4、倒计时 js 5、求一个倒计时js代码,非

2023-12-08
php输出倒计时显示(php倒计时10秒)

2022-11-09
倒计时js源码(web倒计时代码)

本文目录一览: 1、求一个倒计时js代码,非常简单的 2、帮忙改一个js倒计时代码 3、js倒计时(距离结束还有多少时间)的代码分享 4、JS 5秒倒计时的代码怎么写?时间要实时显示在屏幕上的。 求一

2023-12-08
简单的倒计时js实现代码,js倒计时三种简单实现方式

本文目录一览: 1、JS 5秒倒计时的代码怎么写?时间要实时显示在屏幕上的。 2、求一个倒计时js代码,非常简单的 3、用js写倒计时~但规定要用以下代码~求助 JS 5秒倒计时的代码怎么写?时间要实

2023-12-08
php动态倒计时,php倒计时代码

2022-12-02
js实现简单的时分秒倒计时代码(js倒计时代码10秒)

本文目录一览: 1、帮忙改一个js倒计时代码 2、求一个倒计时js代码,非常简单的 3、时间倒计时代码 4、js倒计时代码 帮忙改一个js倒计时代码 (function(timeleft) { var

2023-12-08
Python计时器:秒表、倒计时、定时器等实用功能

2023-05-13
计时器的js代码(计时器的js代码是多少)

本文目录一览: 1、js计时器中setTimeout和setInterval的区别和使用 2、提问一段关于倒计时的javascript代码,请大神指点 3、怎样用javascript做一个计时器 4、

2023-12-08