vue3实现验证码校验的功能

简介: 最近想实现使用vue3实现一个简易的前端验证码校验的功能,就花了点时间实现了,这只是一个简易版的,但是用在项目中是没有啥问题的,废话不多说,先来看下最终实现的效果。写着玩的 哈哈

📓最近想实现使用vue3实现一个简易的前端验证码校验的功能,就花了点时间实现了,这只是一个简易版的,但是用在项目中是没有啥问题的,废话不多说,先来看下最终实现的效果。

image.gif

📓现在让我们来一步一步的实现就行,先把代码贴出来

<template>
    <div>
        <div class="box">
            <div>
                <span>输入验证码:</span><el-input class="input" v-model="numberinput"></el-input>
            </div>
            <div class="rendombox">
                <div class="rendom" ref="rendom">{{ numberrandom }}</div>
                <div class="rendomimg rendom">
                    <img :src="imageData">
                </div>
            </div>
            <el-button style="height: 40px;" @click="refresh">刷新</el-button>
            <el-button style="height: 40px;" @click="login">登录</el-button>
        </div>
    </div>
</template>
<script lang="ts">
import { nextTick, onMounted, ref, watch } from 'vue'
import html2canvas from 'html2canvas'
export default ({
    setup() {
        let numberrandom = ref()
        let numberinput = ref()
        let imageData = ref()
        const rendom: any = ref()
        const canvas = (data: any) => {
            nextTick(() => {
                html2canvas(data).then(canvas => {
                    imageData.value = canvas.toDataURL('image/png');
                });
            })
        }
        const random = () => {
            numberrandom.value = Math.floor(Math.random() * 10000) % 10000
        }
        random()
        const refresh = async () => {
            random()
            canvas(rendom.value)
            console.log(rendom.value, 1)
        }
        const login = () => {
            if (numberinput.value == numberrandom.value) {
                alert("验证通过,在这里写登录成功的代码")
            } else {
                alert("登录失败,在这里写登录失败后的代码")
            }
        }
        onMounted(() => {
            canvas(rendom.value)
        })
        return {
            numberrandom, random, numberinput, login, rendom, imageData, refresh
        }
    },
})
</script>
<style>
@font-face {
    font-family: "christmas";
    src: url("../ttf/Christmas_Wonderful.ttf");
}
.box {
    display: flex;
    flex-direction: row
}
.input {
    width: 120px;
    height: 40px;
    margin-right: 20px;
}
.rendom {
    font-family: "christmas", sans-serif;
    border: 0.5px solid #ccc;
    line-height: 50px;
    width: 100px;
    text-align: center;
    height: 38px;
    font-size: 50px;
    margin-right: 20px;
    background-color: #F1F1F5;
    /*背景色*/
    background-image: linear-gradient(90deg, rgba(200, 0, 0, 0.15) 10%, rgba(0, 0, 0, 0) 10%), linear-gradient(0deg, rgba(200, 0, 0, 0.15) 10%, rgba(0, 0, 0, 0) 10%);
    /*rgba(0, 0, 0, 0),transparent全透明黑*/
    background-size: 40px 10px;
    /*调节格子宽 高*/
}
.rendombox {
    position:relative;
}
.rendomimg {
    position:absolute;
    top: 0;
    left: 0;
}
.rendomimg>img{
    width:100px;
    height:38px;
}
</style>

image.gif

📓按照下方的步骤来

1,基本的页面样式

       📓基本的样式我这里就不多说了,就正常的样式即可,主要的还是验证码方面。

2,生成随机数

       2.1 验证码都是随机数,我们这里需要前端生成随机数,然后将随机数放在页面上,这里我使用了一个div来放置随机数。代码如下

let numberrandom = ref()
        const random = () => {
            numberrandom.value = Math.floor(Math.random() * 10000) % 10000
        }

image.gif

       2.2  同时还需要将生成随机数函数放在钩子函数onmounted里执行,保证每次进入到这个页面时都能生成这个函数

onMounted(() => {
            random()
        })

image.gif

       2.3 将随机数渲染到页面上去

<div class="rendom"><span>{{ numberrandom }}</span></div>

image.gif

3.字体处理

       📓我们看到的验证码都是一些艺术字,所以这里我们也需要对验证码多艺术字处理,我们首先找到字体文件,这个一般在一些字体下载网上能找到,ttf格式的文件,我们在src下新建一个文件夹,文件夹里放置我们的ttf的文件,如下图:

image.gif

📓然后我们在我们放验证码内容的外层加上一层div,给这个div设置一个class名

image.gif

📓然后我们在style标签里写css样式,并引入我们的字体文件,如下图

image.gif

📓当我们设置完成后,我们的验证码的文字就变成艺术字啦

4.背景处理

         📓除了字体需要做的不容易识别的话,其实我们还需要对验证码的背景进行处理,让他变得更花。

📓这里我直接用了给验证码加了一套格子背景

background-image: linear-gradient(90deg, rgba(200, 0, 0, 0.15) 10%, rgba(0, 0, 0, 0) 10%), linear-gradient(0deg, rgba(200, 0, 0, 0.15) 10%, rgba(0, 0, 0, 0) 10%);

image.gif

5.将我们的验证码变成图片

       📓这时候我们的验证码已经基本上做好了 这时候我们就需要在做一件事情,将验证码的div块变成图片,这里我使用html2canvas来进行转换

       下载html2canvas

        npm install html2canvas --save

       使用

import html2canvas from 'html2canvas'
 html2canvas(data).then(canvas => {
                    imageData.value = canvas.toDataURL('image/png');
                });

image.gif

       📓其中 我们给html2canvas传入的参数dta就是我们需要转换为图片的元素的元素对象,一般通过vue的ref来获取这个元素对象,然后将对象传入即可,回调函数里返回一个图片地址,将这个图片地址通过img标签渲染到页面上即可。

       📓注意,因为我们将div变成图片是要在获取到元素对象后才执行,所以,转换代码要卸载nextick的的钩子函数里:

nextTick(() => {
                html2canvas(data).then(canvas => {
                    imageData.value = canvas.toDataURL('image/png');
                });
            })

image.gif

       📓到了这一步后,我们就能发现页面上显示出了2个验证码的显示框,这时候,我们就需要,将我们的图片的验证码贴到文字验证码上方,这里我使用定位的方式来实现

.rendombox {  //外层的div
    position:relative;
}
.rendomimg { //图片
    position:absolute;
    top: 0;
    left: 0;
}

image.gif

       📓到现在这一步之后,就基本上实现的验证码的功能,有一点需要注意,我们获取ref的代码要写在nomounted的钩子函数里。

📓随手写的,作一个知识扩展吧 别当真哈

目录
打赏
0
0
0
0
5
分享
相关文章
|
4月前
|
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
157 58
创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
这是一篇关于创建Vue项目的详细指南,涵盖从环境搭建到项目部署的全过程。
256 1
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
131 56
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
56 8
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
169 3
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
83 8
|
3月前
|
vue使用iconfont图标
vue使用iconfont图标
162 1
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等