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

yizhihongxing

下面是详细讲解“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实现时间轴功能

    下面是Vue实现时间轴功能的完整攻略,包含以下几个步骤: 设计数据结构 在实现时间轴功能前,我们需要先设计出所需的数据结构,以便后续的实现。一般来说,时间轴需要包含以下内容: 时间节点的时间戳 时间节点的标题 时间节点的内容 我们可以将这些内容封装成一个对象,例如: { timestamp: ‘2021-04-01’, title: ‘第一条时间线’, co…

    Vue 2023年5月28日
    00
  • Vue项目中打包优化的四种方法详解

    Vue项目中打包优化的四种方法详解 Vue是一个流行的JavaScript前端框架,它拥有易学易用、功能强大的特点,可以帮助开发者快速构建高效的Web应用程序。然而,在较大的Vue项目中,应用程序的文件大小和加载时间可能会成为问题。在本文中,我们将介绍四种Vue项目中打包优化的方法,以减少应用程序的加载时间和文件大小。 方法1:使用CDN 使用CDN(内容分…

    Vue 2023年5月27日
    00
  • vue3中defineComponent 的作用详解

    下面就是对“vue3中defineComponent 的作用详解”的完整攻略: 什么是 defineComponent defineComponent 是 Vue 3 中的一个工厂函数,用来创建一个组件。我们可以将其看作是一个替代 Vue 2.x 中的 Vue.extend 和单文件组件中的 export default。 defineComponent 可…

    Vue 2023年5月27日
    00
  • Vue.js源码分析之自定义指令详解

    Vue.js源码分析之自定义指令详解 什么是自定义指令? 在使用Vue.js开发过程中,我们可以使用内置的指令来处理DOM元素。例如v-show, v-if, v-for等指令,它们都能让我们在DOM节点上添加一些行为。除了这些内置指令,Vue.js还支持自定义指令来扩展DOM行为。 自定义指令的语法 在Vue.js中,自定义指令需要使用Vue.direct…

    Vue 2023年5月28日
    00
  • Vue3生命周期函数和方法详解

    Vue3生命周期函数和方法详解 生命周期函数 Vue3中的生命周期函数有如下: beforeCreate 在实例准备被创建之前,也就是数据观测和初始化事件还没开始的时候触发。在这个阶段无法获取到 data 和 methods 中的数据。此时我们可以在此阶段中做一些初始化的操作,如全局变量的初始化。 export default { beforeCreate(…

    Vue 2023年5月28日
    00
  • vue-cli 3.0 自定义vue.config.js文件,多页构建的方法

    我将会详细讲解“vue-cli 3.0自定义vue.config.js文件,多页构建的方法”的完整攻略。 什么是vue-cli 3.0? vue-cli是一个官方的Vue.js脚手架,它可以快速搭建一个完整的Vue.js开发环境,提供了现代化的构建工具和工作流程。 自定义vue.config.js文件 在使用vue-cli 3.0开发项目时,我们可以通过自定…

    Vue 2023年5月28日
    00
  • vue如何解决循环引用组件报错的问题

    在Vue中,当两个组件相互引用时(循环引用),在编译时会出现报错。这是因为Vue在编译过程中将模板转换为渲染函数,遇到循环引用会导致无限递归,从而导致程序挂掉。因此,我们需要使用一些技巧来解决这个问题。 1. 使用动态组件 动态组件可以解决循环引用的问题。动态组件是一个占位符,可以渲染不同的组件。我们可以使用v-bind动态绑定组件名来实现动态组件,代码如下…

    Vue 2023年5月28日
    00
  • Vue实现选择城市功能

    Vue实现选择城市功能可以分为以下步骤: 1. 引入第三方城市数据 为了实现城市选择功能,我们需要先引入第三方城市数据,这里可以选择 city.json 这个json文件,里面包含了全国各个城市的数据。 2. 安装并引入element-ui组件库 Vue框架本身并不提供选择框组件,所以我们需要借助第三方的UI组件库。这里我们选择element-ui组件库,并…

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