Vue3 实现验证码倒计时功能(刷新保持状态)

下面是详细讲解“Vue3 实现验证码倒计时功能(刷新保持状态)”的完整攻略。

一、需求分析

我们需要在用户登录页面中,实现一个验证码倒计时功能。用户在输入错误的验证码后,可以点击重新获取验证码,重新开始倒计时。同时,用户切换页面或刷新页面后,倒计时功能仍然可以继续。

二、实现思路

我们可以使用 Vue3 中的 Composition API 以及 localStorage 来实现上述需求。

具体思路如下:

  1. 使用 ref 定义一个倒计时变量 countdown,初始化为指定的倒计时时间;
  2. 使用 computed 定义一个计算属性 countdownText,用于显示倒计时时间的文本;
  3. 使用 watch 监听 countdown 的变化,如果倒计时结束,那么将 countdown 重置为初始倒计时时间;
  4. 在点击获取验证码时,将倒计时的状态存储在 localStorage 中,以便刷新或切换页面时可以继续倒计时;
  5. 在组件初始化时,从 localStorage 中读取倒计时状态,如果存在,则根据存储的倒计时状态重新开始倒计时。

三、代码实现

下面是详细的代码实现:

<template>
  <div>
    <button @click="onRefresh" :disabled="countdown > 0">{{ countdownText }}</button>
  </div>
</template>

<script>
import { ref, computed, watch, onMounted } from 'vue'

export default {
  setup() {
    const COUNTDOWN_TIME = 60 // 倒计时时间
    const countdown = ref(0) // 倒计时变量

    // 计算倒计时文本
    const countdownText = computed(() => {
      if (countdown.value === 0) {
        return '获取验证码'
      } else {
        return `重新获取(${countdown.value}s)`
      }
    })

    // 倒计时结束时,重置倒计时变量
    watch(countdown, (value) => {
      if (value === 0) {
        localStorage.removeItem('countdown')
      }
    })

    // 点击重新获取验证码,开始倒计时并存储倒计时状态
    function onRefresh() {
      countdown.value = COUNTDOWN_TIME
      localStorage.setItem('countdown', Date.now() + COUNTDOWN_TIME * 1000)
    }

    // 组件加载时读取倒计时状态,并根据状态重新开始倒计时
    onMounted(() => {
      const endTime = localStorage.getItem('countdown')
      if (endTime) {
        const remainingTime = Math.max(0, endTime - Date.now()) / 1000
        if (remainingTime > 0) {
          countdown.value = remainingTime
        }
      }
    })

    // 返回变量和函数
    return {
      countdown,
      countdownText,
      onRefresh,
    }
  },
}
</script>

在上述代码中,我们使用了 refcomputedwatchonMounted 等 Composition API 的函数来实现验证码倒计时功能,并使用 localStorage 存储了倒计时状态。

四、示例说明

下面是两条示例说明,来演示上述代码的使用场景。

示例一

用户打开登录页面,发现还未获取验证码;用户点击“获取验证码”按钮,并此时会开始倒计时;用户在倒计时结束之前,未能成功输入正确的验证码;用户重新点击“获取验证码”按钮,此时会重新开始倒计时。

# 用户打开登录页面,发现还未获取验证码
按钮文本: 获取验证码

# 用户点击“获取验证码”按钮
按钮文本: 重新获取(60s)

# 倒计时10秒后
按钮文本: 重新获取(50s)

# 用户在倒计时结束之前,未能成功输入正确的验证码

# 用户重新点击“获取验证码”按钮
按钮文本: 重新获取(60s)

# 倒计时5秒后
按钮文本: 重新获取(55s)

示例二

用户打开登录页面,发现已经获取了验证码;用户刚输入了部分验证码,但此时不得不离开页面;用户回到页面后,仍然可以按照之前的倒计时继续输入验证码。

# 用户打开登录页面,已经获取了验证码
按钮文本: 重新获取(50s)

# 用户刚输入了部分验证码,但此时不得不离开页面

# 用户回到页面后
按钮文本: 重新获取(45s)

# 倒计时到达0秒后,又重新开始了倒计时
按钮文本: 重新获取(60s)

这就是“Vue3 实现验证码倒计时功能(刷新保持状态)”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3 实现验证码倒计时功能(刷新保持状态) - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • Vue.js中的下载和调用方式

    Vue.js是一个流行的前端框架,被广泛应用于构建单页应用程序。在使用Vue.js时,我们需要将Vue.js的代码库下载到本地,并在项目中引用。本文将详细讲解Vue.js中的下载和调用方式,包括以下步骤: 下载Vue.js代码库 在使用Vue.js之前,我们需要将Vue.js下载到本地。Vue.js的代码库托管在GitHub上,我们可以从下面的链接中获取Vu…

    Vue 2023年5月28日
    00
  • 详解Vue中watch的详细用法

    下面我就详细讲解一下“详解Vue中watch的详细用法”。 什么是watch 在Vue.js中,watch是一个非常有用的特性。他允许你在监测到数据的变化时做出相应的响应。watch可以监测一个特定的属性,如果这个属性的值发生变化,就会调用一段特定的函数。 watch的基本用法 下面,我们先来看一下watch的基本用法。在Vue实例中可以通过$watch方法…

    Vue 2023年5月28日
    00
  • webpack4打包vue前端多页面项目

    关于“webpack4打包vue前端多页面项目”的攻略,我会从以下几个方面进行详细讲解: 安装webpack及相关依赖 配置webpack 多页面配置 示例说明 下面我们将一步一步进行讲解。 1. 安装webpack及相关依赖 首先,我们需要全局安装webpack和webpack-cli,这里我使用的是webpack4版本: npm install webp…

    Vue 2023年5月28日
    00
  • Vue3发送post请求出现400 Bad Request报错的解决办法

    以下是 “Vue3发送post请求出现400 Bad Request报错的解决办法” 的完整攻略: 问题描述 在使用 Vue3 进行 post 请求时,可能会遇到 400 Bad Request 错误,这通常是因为请求的数据格式或参数设置错误导致的。 解决方法 1. 设置请求头 可以尝试设置请求头中的 Content-Type 和 Accept 字段,确保发…

    Vue 2023年5月27日
    00
  • SpringBoot校园综合管理系统实现流程分步讲解

    下面我将详细讲解“SpringBoot校园综合管理系统实现流程分步讲解”的完整攻略。 一、项目介绍 在这个部分,我们可以简要介绍一下该项目的背景和目的,以及使用的开发工具和框架等相关内容。 二、项目环境搭建 在这个部分,我们需要介绍如何搭建项目所需的环境,以及如何准备开发所需要的依赖库及配置文件等。 三、项目结构说明 在这个部分,我们需要详细介绍整个项目的结…

    Vue 2023年5月28日
    00
  • vue自定义filters过滤器

    当我们使用Vue的时候,经常需要对数据进行一些格式化或者处理,Vue提供了一种非常方便的机制:过滤器(Filters)。 什么是过滤器(Filters)? 过滤器是Vue在模板中的一种特殊的实用工具。它是用来格式化、过滤或转换模板中的数据的。基本上,它是一个函数,可以接收一个值或多个值作为参数,并且最终返回一个新的值作为输出结果。 如何定义Vue过滤器? 我…

    Vue 2023年5月27日
    00
  • Vue3搭建组件库开发环境的示例详解

    为了搭建Vue3组件库开发环境,我们可以按照以下步骤进行: 安装vue-cli并初始化项目 首先我们需要在本地安装vue-cli,使用npm安装即可: npm install -g @vue/cli 安装完成后,我们可以使用下面的命令初始化一个新的vue项目: vue create my-project 安装必要依赖 在项目根目录下执行以下命令安装必要的依赖…

    Vue 2023年5月27日
    00
  • JS 实现获取对象属性个数的方法小结

    JS 实现获取对象属性个数的方法小结 在 JavaScript 中,我们可以通过不同的方法获取对象的属性个数,下面是几种常见方法的介绍以及示例说明。 方法一:Object.keys() Object.keys() 方法返回一个由指定对象自身的属性名组成的数组,我们可以通过获取该数组的长度来获取到对象的属性个数。 const obj = { name: ‘Jo…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部