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 相关文章推荐
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
基于zepto.js实现手机相册功能
Jul 11 Javascript
使用canvas进行图像编辑的实例
Aug 29 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 Javascript
微信小程序利用for循环解决内容变更问题
Mar 05 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
JavaScript实现跟随鼠标移动的盒子
Jan 28 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 操作excel文件的方法小结
2009/12/31 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
Python实现全排列的打印
2018/08/18 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python是怎么被发明的
2020/06/15 Python
浅谈python 类方法/静态方法
2020/09/18 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
研修第一天随笔感言
2014/02/15 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
个人评语大全
2014/05/04 职场文书
暑期实践个人总结
2015/03/06 职场文书
税务会计岗位职责
2015/04/02 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
MySQL数据库之存储过程 procedure
2022/06/16 MySQL