vue随机验证码组件的封装实现


Posted in Javascript onFebruary 19, 2020

本文实例为大家分享了vue随机验证码组件的具体代码,供大家参考,具体内容如下

由于工作需要自己做了一个验证码组件,灵活性不高,但是可以用,代码也不太复杂

<template>
 <div style="display: flex;justify-content: start;align-items: center;border-radius: 4px">
 <canvas style="" :width="contentWidth" :height="contentHeight" id="cav" @click="next()"></canvas>
 </div>
</template>

<script>
// import num from './components/cc'
export default {
 name: 'verificationCode',
 props: {
 fontSize: {
 type: Number,
 default: 20
 },
 contentWidth: {
 type: Number,
 default: 100
 },
 contentHeight: {
 type: Number,
 default: 40
 },
 verification: {
 type: String
 },
 refreshCode: {
 type: Boolean
 }
 },
 watch: {
 verification: function (newVal) {
 if (newVal.toLowerCase() === this.identify.toLowerCase()) {
 this.$emit('handleIdentify', true)
 } else {
 this.$emit('handleIdentify', false)
 }
 },
 refreshCode: function (newVal) {
 this.draw()
 }
 },
 mounted () {
 this.draw()
 },
 data () {
 return {
 identify: '',
 letter: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
 }
 },
 methods: {
 draw () {
 let self = this
 let text = this.randomNum()
 this.identify = text.join('')
 let ctx = document.getElementById('cav')
 let cav = ctx.getContext('2d')
 cav.clearRect(0, 0, self.contentWidth, self.contentHeight)
 let w = ctx.width
 let h = ctx.height
 cav.textBaseline = 'bottom'
 self.drawText(cav, text[0], 10, 10, self.randomDeg(0, 0.1), 20)
 self.drawText(cav, text[1], 20, 10, self.randomDeg(0, 0.1))
 self.drawText(cav, text[2], 25, 10, self.randomDeg(0, 0.1))
 self.drawText(cav, text[3], 30, 10, self.randomDeg(0, 0.1))
 let i
 for (i = 0; i < 3; i++) {
 self.drawLine(cav, self.randomDeg(0, 0.3 * w, 1), self.randomDeg(0, h, 1), self.randomDeg(0, w, 1), self.randomDeg(0, h, 1), self.randomDeg(0.8 * w, w, 1), self.randomDeg(0, h, 1))
 }
 },
 drawText (cav, text, x1, y1, route) {
 cav.beginPath()
 cav.fillStyle = '#ffe9db'
 cav.font = this.fontSize + 'px' + ' ' + '黑体'
 cav.translate(x1, y1)
 cav.rotate(Math.PI * route)
 cav.fillText(text, x1, y1)
 cav.fill()
 cav.rotate(-Math.PI * route)
 cav.translate(-(x1), -(y1))
 },
 drawLine (cav, x1, y1, x2, y2, x3, y3) {
 cav.beginPath()
 cav.strokeStyle = 'rgb(155, 204, 237)'
 cav.bezierCurveTo(x1, y1, x2, y2, x3, y3)
 cav.stroke()
 },
 randomNum () { // 生成随机字
 let i
 let letter = this.letter
 let text = []
 for (i = 0; i < 4; i++) {
 text.push(letter[Math.floor(Math.random() * 36)])
 }
 return text
 },
 randomDeg (min, max, f) { // 设置文字倾斜角度
 f = undefined ? Math.random() > 0.5 ? 1 : -1 : 1
 return f * (Math.random() * (max - min) + min)
 },
 next () {
 this.draw()
 }
 }
}
</script>

<style scoped>

</style>

样式什么的自己可以调一调,效果如下:

vue随机验证码组件的封装实现

更多教程点击《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
StringTemplate遇见jQuery冲突的解决方法
Sep 22 Javascript
javascript中处理时间戳为日期格式的方法
Jan 02 Javascript
javascript随机之洗牌算法深入分析
Jun 07 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
Dec 08 Javascript
jQuery插件slides实现无缝轮播图特效
Apr 17 Javascript
jquery文字填写自动高度的实现方法
Nov 07 Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
Aug 21 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
修改vue+webpack run build的路径方法
Sep 01 Javascript
json数据格式常见操作示例
Jun 13 Javascript
vue-form表单验证是否为空值的实例详解
Oct 29 Javascript
JavaScript实现PC端四格密码输入框功能
Feb 19 #Javascript
vue实现带过渡效果的下拉菜单功能
Feb 19 #Javascript
Vue.js仿Select下拉框效果
Feb 18 #Javascript
JavaScript中的惰性载入函数及优势
Feb 18 #Javascript
jquery实现垂直手风琴导航栏
Feb 18 #jQuery
vue微信分享插件使用方法详解
Feb 18 #Javascript
jQuery表单校验插件validator使用方法详解
Feb 18 #jQuery
You might like
调频问题解答
2021/03/01 无线电
for循环连续求和、九九乘法表代码
2012/02/20 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
jquery $.getJSON()跨域请求
2011/12/21 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python性能提升之延迟初始化
2016/12/04 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Python如何使用input函数获取输入
2020/08/06 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
公务员培训心得体会
2013/12/28 职场文书
新手上路标语
2014/06/20 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
创业计划书之餐饮
2019/09/02 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
pytorch 使用半精度模型部署的操作
2021/05/24 Python
Java使用jmeter进行压力测试
2021/07/09 Java/Android
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
instantclient客户端 连接oracle数据库
2022/04/26 Oracle
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS