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(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
bootstrap data与jquery .data
Jul 07 Javascript
新入门node.js必须要知道的概念(必看篇)
Aug 10 Javascript
js实现贪吃蛇小游戏(容易理解)
Jan 22 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
原生javascript AJAX 三级联动的实现代码
May 04 Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 Javascript
vue2配置scss的方法步骤
Jun 06 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 Javascript
微信小程序实现分页加载效果
Nov 19 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
收集前端面试题之url、href、src
2018/03/22 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python实现360皮肤按钮控件示例
2014/02/21 Python
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
战友聚会邀请函
2014/01/18 职场文书
大学军训感言600字
2014/02/25 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
教师见习总结范文
2015/06/23 职场文书