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隐藏参数post传值实例
Apr 18 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
Feb 15 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
详谈innerHTML innerText的使用和区别
Aug 18 Javascript
React Native之prop-types进行属性确认详解
Dec 19 Javascript
使用vuex缓存数据并优化自己的vuex-cache
May 30 Javascript
vue中如何让子组件修改父组件数据
Jun 14 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
JS实现的全选、全不选及反选功能【案例】
Feb 19 Javascript
小程序组件之自定义顶部导航实例
Jun 12 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
用PHP调用Oracle存储过程
2006/10/09 PHP
PHP 万年历实现代码
2012/10/18 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
jQuery实现定时隐藏对话框的方法分析
2018/02/12 jQuery
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
js实现聊天对话框
2020/02/08 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
python操作日期和时间的方法
2014/03/11 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
pytorch数据预处理错误的解决
2020/02/20 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
质检员岗位职责
2013/12/17 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
大学生在校表现评语
2014/12/31 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android