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 相关文章推荐
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
javascript全局变量封装模块实现代码
Nov 28 Javascript
JS正则表达式验证数字代码
Jan 28 Javascript
鼠标拖拽移动子窗体的JS实现
Feb 25 Javascript
常用的JS验证和函数汇总
Dec 23 Javascript
AngularJS 使用$sce控制代码安全检查
Jan 05 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
Feb 21 Javascript
ES6中数组array新增方法实例总结
Nov 07 Javascript
vue :src 文件路径错误问题的解决方法
May 15 Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 Javascript
javascript 设计模式之组合模式原理与应用详解
Apr 08 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 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
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
js+css在交互上的应用
2010/07/18 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
从vue源码看props的用法
2019/01/09 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
python创建关联数组(字典)的方法
2015/05/04 Python
MySQL最常见的操作语句小结
2015/05/07 Python
Python实现的RSS阅读器实例
2015/07/25 Python
python编程实现归并排序
2017/04/14 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
python3.7 sys模块的具体使用
2019/07/22 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python request中文乱码问题解决方案
2020/09/17 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
英语专业应届生求职信范文
2013/11/15 职场文书
会走路的树教学反思
2014/02/20 职场文书
甘南现象心得体会
2014/09/11 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
工作失职自我检讨书
2015/05/05 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android