广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue3+vite3+typescript实现验证码功能及表单验证效果
  • 576
分享到

vue3+vite3+typescript实现验证码功能及表单验证效果

vue3+vite3+typescript验证码vue3+vite3+typescript表单验证 2023-05-16 15:05:07 576人浏览 安东尼
摘要

目录验证码组件父组件表单验证最终效果验证码组件 <template> <div class="captcha" style="display: flex;"&

验证码组件


<template>
  <div class="captcha" style="display: flex;">
    <canvas ref="canvas" width="100" height="40"></canvas>

  </div>
  <div class="valicode-btn">
    <el-button type="text" @click="refresh">看不清,换一张</el-button>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'Vue'
const emits = defineEmits(['getCode'])
const canvasRef = ref<htmlCanvasElement | null>(null)
const ctx = ref<CanvasRenderinGContext2D | null>(null)
const code = ref('')
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
const charLength = chars.length

function getRandomChar() {
  return chars.charAt(Math.floor(Math.random() * charLength))
}

function draw() {
  if (!ctx.value) return

  ctx.value.clearRect(0, 0, canvasRef.value!.width, canvasRef.value!.height)

  let x = 10
  for (let i = 0; i < 4; i++) {
    const c = getRandomChar()
    code.value += c
    ctx.value.font = 'bold 20px Arial'
    ctx.value.fillStyle = '#333'
    ctx.value.fillText(c, x, 25)
    x += 20
  }

  for (let i = 0; i < 10; i++) {
    ctx.value.strokeStyle = '#ccc'
    ctx.value.beginPath()
    ctx.value.moveTo(Math.random() * 100, Math.random() * 40)
    ctx.value.lineTo(Math.random() * 100, Math.random() * 40)
    ctx.value.stroke()
  }
  emits('getCode', code.value)
}

function refresh() {
  code.value = ''
  draw()
  emits('getCode', code.value)
}

onMounted(() => {
  const code = ref('')
  canvasRef.value = document.querySelector('canvas')
  emits('getCode', code.value)
  ctx.value = canvasRef.value?.getContext('2d')
  draw()
})
</script>

<style scoped>
.captcha {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
}
.valicode-btn{
    height:50px;
    line-height: 50px;
}
</style>

🎨 这是一个Vue组件,包含一个验证码的canvas和一个刷新按钮。具体解释如下:

  • <template>标签中包含了组件的模板,其中包含了一个class为captcha的div,其中包含了一个canvas元素和一个class为valicode-btn的div,后者包含了一个刷新按钮。
  • <script>标签中使用了Vue 3的Composition api,包含了以下内容:
    • import语句引入了Vue 3的refonMounted函数,以及defineEmits函数用于定义组件的自定义事件。
    • const关键字定义了一个canvasRef变量,用于引用canvas元素;一个ctx变量,用于引用canvas的2D上下文;一个code变量,用于存储验证码;一个chars变量,用于存储可用于生成验证码的字符;一个charLength变量,用于存储可用于生成验证码的字符的数量。
    • getRandomChar函数用于从chars中随机获取一个字符🎲。
    • draw函数用于绘制验证码。首先清空canvas,然后循环4次,每次从chars中随机获取一个字符,并将其绘制到canvas上。同时,将字符添加到code变量中。接着循环10次,每次绘制一条随机的直线,用于增加验证码的复杂度。
    • refresh函数用于刷新验证码。首先清空code变量,然后调用draw函数重新绘制验证码,并触发自定义事件getCode,将新的验证码传递给父组件。
    • onMounted函数用于在组件挂载后执行一些操作。首先定义一个code变量,然后引用canvas元素和2D上下文,并调用draw函数绘制验证码。最后触发自定义事件getCode,将验证码传递给父组件。

3.<style>标签中定义了组件的样式,其中.captcha类用于设置验证码和刷新按钮的布局,.valicode-btn类用于设置刷新按钮的样式。scoped属性用于将样式限定在组件内部。

父组件

  <div class="validate-code">
     <div style="display: flex">
       <el-fORM-item label="验证码:" prop="valicode">
          <el-input v-model="form.valicode"/>
                                                   
            </el-form-item>
          <valicode ref="refresh" @getCode="getCode"  width="150px" />
      </div>
  </div>

<script setup lang="ts">

const code = ref('')
const getCode=(value:any)=> {
    code.value = value
    console.log(value);
}

</script>

验证码组件是通过引入一个名为valicode的组件来实现的。当验证码组件生成新的验证码时,会通过@getCode事件将验证码传递给父组件,并通过console.log打印出来。父组件通过v-model绑定了验证码输入框的值,当用户输入验证码时,会将输入的值保存在form.valicode中。整个表单的验证依赖于prop属性,即valicode。如果用户未输入验证码或输入的验证码与生成的验证码不匹配,则表单验证不通过。

表单验证

const rules=Reactive<FormRules>({
	valicode: [
    { required: true, message: '请输入验证码', trigger: 'blur' },
    { validator: checkCode, trigger: 'blur' },
    ],
})
const checkCode=(rule: any, value: any, callback: any)=>{
    console.log(code.value);
    
    if (!value) {
    return  callback(new Error('请输入验证码'))
  }
  setTimeout(() => {
    if (value != code.value) {
      callback(new Error('验证码有误,请重新输入'))
    }else {
      callback()
    }
  }, 500)
}

通过reactive函数创建了一个名为rules的响应式对象,其中包含一个名为valicode的属性,其值为一个数组,数组中包含两个对象,分别表示对于valicode这个表单项的两个验证规则。第一个规则要求该表单项必填,且在失去焦点时进行验证;第二个规则使用了自定义的验证函数checkCode,在失去焦点时进行验证。

checkCode函数接收三个参数,分别为验证规则对象、当前表单项的值和回调函数。在函数内部,首先打印出了一个名为code的响应式对象的值,然后判断当前表单项的值是否为空,如果为空则通过回调函数返回一个错误信息。如果不为空,则通过setTimeout函数模拟了一个异步验证过程,500毫秒后判断当前表单项的值是否等于code的值,如果不等于则通过回调函数返回一个错误信息,否则通过回调函数返回一个空值表示验证通过。

这里setTimeout函数给form标签加上status-icon会在校验时有一个转圈的效果哦~

最终效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到此这篇关于vue3+vite3+typescript实现验证码功能及表单验证效果的文章就介绍到这了,更多相关vue3+vite3+typescript验证码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue3+vite3+typescript实现验证码功能及表单验证效果

本文链接: https://www.lsjlt.com/news/210124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue3+vite3+typescript实现验证码功能及表单验证效果
    目录验证码组件父组件表单验证最终效果验证码组件 <template> <div class="captcha" style="display: flex;"&...
    99+
    2023-05-16
    vue3+vite3+typescript验证码 vue3+vite3+typescript表单验证
  • Vue3实现登录表单验证功能
    目录一.实现思路与效果图二.实现具体过程三.完整代码与效果图一.实现思路与效果图 使用async-validator 插件,阿里出品的 antd 和 ElementUI 组件库中表单...
    99+
    2022-11-13
  • vue实现表单验证功能
    本篇主要讲述如何基于NUXT的validate方法实现表单的验证。 将验证方法封装后,使用的时候只需像:rules="filter_rules({required:true,type...
    99+
    2022-11-12
  • jQuery实现表单验证功能
    jQuery表单验证实例 / 包含用户名、密码、住址、邮箱验证 如下图 别忘了引入jQuery框架!!! 话不多说直接先上jQuery部分代码: <script type...
    99+
    2022-11-12
  • Vue3 实现验证码倒计时功能
    目录前言实现效果PS:Vue3 - 验证码按钮倒计时实现前言 倒计时的运用场景:获取手机验证码倒计时、获取邮箱验证码倒计时等场景,废话不多说,开始吧。 之前给大家介绍过Vue3&nb...
    99+
    2023-01-07
    Vue3 验证码倒计时 Vue获取验证码倒计时 vue3验证码按钮倒计时
  • springboot验证码生成及验证功能怎么实现
    这篇“springboot验证码生成及验证功能怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot验证...
    99+
    2023-07-06
  • vue实现表单验证小功能
    本文实例为大家分享了vue实现表单验证的具体代码,供大家参考,具体内容如下 1.路由跳转 先点开Vue项目中src目录配置router文件然后用import暴露你的表单页名称并在你的...
    99+
    2022-11-12
  • 简单实现Java验证码功能
    今晚看到网上有关验证码的实现的代码,很早就想写一个了,感觉验证码挺有意思的,于是就写了一个,然而后来一直加载不出图片。尝试了很多方法,后来终于解决了,原来是我项目里面的 web.xml中没有部署servlet的映射,web.xml如下图:运...
    99+
    2023-05-31
    java 验证码 ava
  • Ajax如何实现表单验证功能
    本篇内容主要讲解“Ajax如何实现表单验证功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ajax如何实现表单验证功能”吧! 兼...
    99+
    2022-10-19
  • AngularJS怎么实现表单验证功能
    这篇文章给大家分享的是有关AngularJS怎么实现表单验证功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:在AngularJS的管辖下,每个表单form都会创建一个...
    99+
    2022-10-19
  • SpringMVC实现表单验证功能详解
    本章节内容很丰富,主要有基本的表单操作,数据的格式化,数据的校验,以及提示信息的国际化等实用技能。首先看效果图项目结构图接下来用代码重点学习SpringMVC的表单操作,数据格式化,数据校验以及错误提示信息国际化。请读者将重点放在UserC...
    99+
    2023-05-30
    spring springmvc 表单验证
  • vue3 + async-validator实现表单验证的示例代码
    目录vue3 表单验证前言搭建vue3的项目vue3的表单验证1.表单代码2.添加验证2-1. 初始化2-2. 多个表单的验证2-3. Promise方式验证2-4. 正则验证2-5...
    99+
    2022-11-13
  • AngularJS实现表单验证功能的方法
    这篇文章主要为大家展示了“AngularJS实现表单验证功能的方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AngularJS实现表单验证功能的方法”这篇文...
    99+
    2022-10-19
  • AngularJS中如何实现表单验证功能
    小编给大家分享一下AngularJS中如何实现表单验证功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  ...
    99+
    2022-10-19
  • jsp实现简单图片验证码功能
    本文实例为大家分享了jsp实现简单图片验证码的具体代码,供大家参考,具体内容如下 一、实现的功能分析 (1)在登陆页面加验证码的功能,起到一定的安全性。在输入正确的验证码,用户名和密...
    99+
    2022-11-13
  • Vue3 + elementplus实现表单验证+上传图片+ 防止表单重复提交功能
    首先,上官网地址 https://element.eleme.cn/ 首先页面上面用了弹窗的形式,做完之后长这样,有全屏,关闭等按钮,上效果图和完整代码!!!!! <!--点...
    99+
    2022-11-13
    Vue3  elementplus表单验证 Vue3  elementplus防止表单重复提交 Vue3  elementplus上传图片
  • 怎么使用vue实现表单验证功能
    这篇文章主要讲解了“怎么使用vue实现表单验证功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用vue实现表单验证功能”吧!具体代码如下:<!DOCTYPE html...
    99+
    2023-07-04
  • 微信小程序实现表单验证功能
    微信小程序是一种快速构建原生应用的开发框架,它在移动端应用开发中应用广泛。在开发过程中,表单验证是一个常见的需求,用于确保用户输入的数据的有效性和安全性。本文将介绍如何在微信小程序中实现表单验证功能,并提供具体的代码示例。一、表单验证的基本...
    99+
    2023-11-21
    表单验证 微信 小程序
  • vue+vue-validator如何实现表单验证功能
    这篇文章主要为大家展示了“vue+vue-validator如何实现表单验证功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue+vue-validator...
    99+
    2022-10-19
  • HTML5如何实现表单自动验证功能
    这篇文章主要为大家展示了“HTML5如何实现表单自动验证功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML5如何实现表单自动验证功能”这篇文章吧。在Ht...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作