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代码
Mar 07 Javascript
javascript中使用正则计算中文长度的例子
Apr 29 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
浅谈JavaScript中的this指针和引用知识
Aug 05 Javascript
Javascript Function.prototype.bind详细分析
Dec 29 Javascript
JavaScript手风琴页面制作
May 17 Javascript
js获取元素的偏移量offset简单方法(必看)
Jul 05 Javascript
JavaScript实现数值自动增加动画
Dec 28 Javascript
JavaScript中常用的简洁高级技巧总结
Mar 10 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
Nov 04 Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
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简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
分享Python文本生成二维码实例
2016/01/06 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
五年级语文教学反思
2014/01/30 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
政府采购方案
2014/06/12 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
2016年离婚协议书范文
2016/03/18 职场文书