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随机之洗牌算法深入分析
Jun 07 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
node.js调用C++开发的模块实例
Jul 03 Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
详解浏览器渲染页面过程
Feb 09 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
微信小程序页面上下滚动效果
Nov 18 Javascript
layui实现数据表格点击搜索功能
Mar 26 Javascript
基于form-data请求格式详解
Oct 29 Javascript
Vue.js的模板语法详解
Feb 16 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+DBM的同学录程序(1)
2006/10/09 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
jQuery 性能优化指南 (1)
2009/05/21 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
浅谈javascript的调试
2015/01/28 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
python里glob模块知识点总结
2021/01/05 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
企业与个人合作经营协议书
2014/11/01 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers