Vue3 实现验证码倒计时功能

yizhihongxing

下面是关于“Vue3 实现验证码倒计时功能”的完整攻略:

1. 创建 Vue3 项目

首先需要创建一个 Vue3 的项目,这里使用 Vue CLI 工具来创建:

vue create vue3-captcha

然后使用以下命令启动项目:

cd vue3-captcha
npm run serve

2. 编写倒计时组件

接下来,我们需要编写一个倒计时组件,用于实现验证码倒计时功能,该组件可以接收两个 prop,一个是倒计时的秒数,一个是倒计时结束后显示的文本:

<template>
  <div v-if="showCountdown">{{ countDown }}</div>
  <div v-else>{{ buttonText }}</div>
</template>

<script>
import { ref, watchEffect } from 'vue'

export default {
  props: {
    seconds: {
      type: Number,
      required: true
    },
    buttonText: {
      type: String,
      default: '发送验证码'
    }
  },
  setup(props) {
    const countDown = ref(props.seconds) // 倒计时秒数
    const showCountdown = ref(false) // 是否显示倒计时

    const sendCode = () => {
      // 发送验证码逻辑
      showCountdown.value = true // 显示倒计时
    }

    // 监听倒计时秒数变化
    watchEffect(() => {
      const timer = setInterval(() => {
        if (countDown.value <= 1) {
          clearInterval(timer)
          showCountdown.value = false // 隐藏倒计时
        } else {
          countDown.value -= 1
        }
      }, 1000)
      return () => clearInterval(timer)
    })

    return { countDown, showCountdown, sendCode }
  }
}
</script>

在上述代码中,我们使用 ref 来定义 countDownshowCountdown 变量,前者用于存储倒计时秒数,后者则用于判断是否显示倒计时。在 sendCode 函数中,我们可以编写发送验证码的逻辑代码。同时,使用 watchEffect 来监听倒计时秒数的变化,当倒计时结束后,会清除 setInterval 定时器并隐藏倒计时。

3. 使用倒计时组件

有了倒计时组件后,我们就可以在需要发送验证码的地方使用该组件了。下面是一个带有获取验证码按钮的示例:

<template>
  <div>
    <button @click="sendCode" :disabled="showCountdown">{{ buttonText }}</button>
    <countdown :seconds="60" buttonText="重新获取" ref="countdown" />
  </div>
</template>

<script>
import Countdown from './components/Countdown.vue'

export default {
  components: { Countdown },
  methods: {
    sendCode() {
      this.$refs.countdown.sendCode()
    }
  }
}
</script>

在上述代码中,我们引入了倒计时组件 Countdown,并将其注册为当前组件的局部组件。然后我们在模板中使用 Countdown 组件,并设置 ref 属性,这样就可以通过 $refs 来调用倒计时组件中的 sendCode 函数了。最后,通过 :disabled 为按钮设置禁用状态,并设置 buttonText重新获取

4. 绑定样式

为了美化获取验证码按钮和倒计时样式,我们还需要为它们绑定一些样式。下面是一个简单的示例:

<template>
  <div>
    <button @click="sendCode" :disabled="showCountdown" class="btn">{{ buttonText }}</button>
    <countdown :seconds="60" buttonText="重新获取" ref="countdown" class="countdown" />
  </div>
</template>

<style>
.btn {
  width: 80px;
  height: 32px;
  background-color: #1890ff;
  color: #fff;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

.countdown {
  padding: 5px;
  border-radius: 4px;
  border: 1px solid #e0e0e0;
  color: #666;
  font-size: 12px;
  text-align: center;
  width: 80px;
  height: 32px;
  line-height: 20px;
}
</style>

在上述代码中,我们为获取验证码按钮添加了一个 btn 类,并设置 background-color, color, border-radiuscursor 样式属性。同时,我们也为倒计时组件添加了一个 countdown 类,并设置了边框、背景色、圆角、字体大小等等属性。

5. 总结

至此,我们的验证码倒计时功能已经完成了。在上述过程中,我们创建了一个 Vue3 项目,并编写了一个倒计时组件,使其可以在验证码发送时实现倒计时功能。通过使用 refwatchEffect 监听变量变化,我们将组件分离为了两个阶段,这使得我们可以一边发送验证码一边显示倒计时。

另外,我们也为验证码获取按钮和倒计时组件绑定了样式,让其更美观整洁。

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

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

相关文章

  • vue + axios get下载文件功能

    简介 Vue.js是一种渐进式JavaScript框架,它可以帮助开发人员更轻松地构建交互式的用户界面。Axios则是一个用于浏览器和Node.js的基于Promise的HTTP客户端,用于处理AJAX请求和RESTful API。本文将介绍如何结合Vue和Axios实现下载文件的功能。 实现过程 首先需要在Vue项目中安装Axios。可以使用npm命令行工…

    Vue 2023年5月28日
    00
  • Vue3.2 新增指令 v-memo 用法详解(提高性能利器)

    我将为您详细讲解“Vue3.2 新增指令 v-memo 用法详解(提高性能利器)”的完整攻略。 简介 Vue 3.2 新增了 v-memo 指令,它专门用于对 Vue 组件进行记忆化优化。记忆化优化可以提高应用程序的运行效率,减少重复渲染和计算,从而大大提高应用程序的性能。 记忆化优化是一种重新运行的策略,该策略中,在组件生成后,不在计算过程中多次工作。所以…

    Vue 2023年5月29日
    00
  • 一文带你完全掌握Vue自定义指令

    一文带你完全掌握Vue自定义指令 什么是自定义指令 在Vue中,指令是一种特殊的语法糖,它可以绑定到DOM元素上,用于实现对DOM元素的操作。Vue自带了很多指令比如v-if、v-for、v-bind等,通过这些指令我们可以实现很多功能。 但是如果在项目中需要实现一些特定的功能,而Vue自带的指令又不能满足需求,这时就需要自定义指令了。 如何定义自定义指令 …

    Vue 2023年5月27日
    00
  • Vue AST的转换实现方法讲解

    一、Vue AST转换的概念及作用 Vue AST是Vue编译器中的一种概念,它可以帮助我们理解Vue模板编译的本质,同时还可以提供一些优化编译模板的方法。AST(抽象语法树)是将代码解析后,构建出来的一棵树形结构模型,表示程序的语法结构,利用AST可以进行程序的分析、优化及计算机制等处理。 在Vue的编译过程中,Vue会先将模板编译成AST节点,然后再转换…

    Vue 2023年5月28日
    00
  • vue给对象动态添加属性和值的实例

    下面是详细讲解“vue给对象动态添加属性和值的实例”的完整攻略: 1. 前置知识 在使用Vue开发过程中,我们经常需要动态给对象添加属性和值。Vue提供了内置方法Vue.set和this.$set来实现对象属性的动态添加。 2. 使用Vue.set Vue提供了Vue.set方法来实现给对象动态添加属性和值,其语法如下: Vue.set(object, ke…

    Vue 2023年5月28日
    00
  • 如何使用HBuilderX把vue项目打包成apk

    下面是使用HBuilderX将Vue项目打包成APK的攻略: 确保环境配置正确 在使用HBuilderX打包Vue项目之前,需要先确保一些环境配置已经正确安装。具体需要安装的软件如下: JDK环境:移动端应用打包需要使用到Java环境,所以首先需要下载和安装JDK。下载JDK的网址为:https://www.oracle.com/technetwork/cn…

    Vue 2023年5月28日
    00
  • vue3 与 vue2 优点对比汇总

    Vue3 与 Vue2 优点对比汇总 前言 Vue3 是 Vue.js 的下一个主要版本,它引入了很多新特性和改进,这些改变让开发者更加轻松、高效地开发 Vue 应用。在这篇文章中,我们会对 Vue3 和 Vue2 进行对比。Vue3 与 Vue2 有哪些不同与改进?在本文中,我们会进行详细的说明。 目录 1.性能优化 2.组件化开发 3.声明式 API 4…

    Vue 2023年5月27日
    00
  • 浅谈Vue的组件间传值(包括Vuex)

    下面就为您详细讲解“浅谈Vue的组件间传值(包括Vuex)”的完整攻略: 一、组件间传值 在Vue中,父组件可以通过属性(prop)的方式向子组件传递数据,而子组件则可以通过事件($emit)的方式向父组件发送数据,从而实现组件间的数据传递。 1.1 父组件向子组件传值 在父组件中,通过在子组件标签上添加属性来向子组件传递数据,例如: <templat…

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