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 相关文章推荐
JS去除右边逗号的简单方法
Jul 03 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
Sep 18 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
Oct 18 Javascript
js函数内变量的作用域分析
Jan 12 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
javaScript实现复选框全选反选事件详解
Nov 20 Javascript
angular2系列之路由转场动画的示例代码
Nov 09 Javascript
微信小程序实现单选功能
Oct 30 Javascript
javascript实现的字符串转换成数组操作示例
Jun 13 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
Sep 11 Javascript
JavaScript类的继承多种实现方法
May 30 Javascript
Vue实现穿梭框效果
Sep 30 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常用文件操作函数汇总
2014/11/22 PHP
php实现复制移动文件的方法
2015/07/29 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
js实现随机数小游戏
2019/06/28 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python 自动去除空行的实例
2018/07/24 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
super()与this()的区别
2016/01/17 面试题
技校生自我鉴定范文
2013/09/26 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
迟到检讨书300字
2014/02/14 职场文书
学生会竞聘书范文
2014/03/31 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
选购到合适的激光打印机
2022/04/21 数码科技