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 相关文章推荐
IE6下javasc#ipt:void(0) 无效的解决方法
Dec 23 Javascript
js获取select默认选中的Option并不是当前选中值
May 07 Javascript
Bootstrap CSS组件之按钮组(btn-group)
Dec 17 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
微信小程序 页面传值详解
Mar 10 Javascript
JS实现的加减乘除四则运算计算器示例
Aug 09 Javascript
JS实现读取xml内容并输出到div中的方法示例
Apr 19 Javascript
微信小程序之事件交互操作实例分析
Dec 03 Javascript
如何用RxJS实现Redux Form
Dec 29 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 Javascript
vue点击标签切换选中及互相排斥操作
Jul 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将会员数据导入到ucenter的代码
2010/07/18 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Python命令行click参数用法解析
2019/12/19 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
Python截图并保存的具体实例
2021/01/14 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
运动会广播稿300字
2014/01/10 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
铅球加油稿100字
2014/09/26 职场文书
护士节慰问信
2015/02/15 职场文书