Vue实现随机验证码功能


Posted in Vue.js onDecember 29, 2020

本文实例为大家分享了Vue实现随机验证码功能的具体代码,供大家参考,具体内容如下

步骤1:创建一个名为identify.vue的子组件

<template>
 <div class="s-canvas">
 <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
 </div>
</template>
<script>
export default {
 name: 'SIdentify',
 props: {
 // 默认注册码
identifyCode: {
  type: String,
  default: "1234"
},
// 字体最小值
fontSizeMin: {
  type: Number,
  default: 35
},
// 字体最大值
fontSizeMax: {
  type: Number,
  default: 35
},
// 背景颜色色值最小值
backgroundColorMin: {
  type: Number,
  default: 180
},
// 背景颜色色值最大值
backgroundColorMax: {
  type: Number,
  default: 240
},
// 字体颜色色值最小值
colorMin: {
  type: Number,
  default: 50
},
// 字体颜色色值最大值
colorMax: {
  type: Number,
  default: 160
},
// 干扰线颜色色值最小值
lineColorMin: {
  type: Number,
  default: 100
},
// 干扰线颜色色值最大值
lineColorMax: {
  type: Number,
  default: 200
},
// 干扰点颜色色值最小值
dotColorMin: {
  type: Number,
  default: 0
},
// 干扰点颜色色值最大值
dotColorMax: {
  type: Number,
  default: 255
},
// 画布宽度
contentWidth: {
  type: Number,
  default: 120
},
// 画布高度
contentHeight: {
  type: Number,
  default: 40
}
 },
 methods: {
 // 生成一个随机数
 randomNum(min, max) {
 return Math.floor(Math.random() * (max - min) + min)
 },
 // 生成一个随机的颜色
 randomColor(min, max) {
 let r = this.randomNum(min, max)
 let g = this.randomNum(min, max)
 let b = this.randomNum(min, max)
 return 'rgb(' + r + ',' + g + ',' + b + ')'
 },
 drawPic() {
 let canvas = document.getElementById('s-canvas')
 let ctx = canvas.getContext('2d')
 ctx.textBaseline = 'bottom'
 // 绘制背景
 ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
 ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
 // 绘制文字
 for (let i = 0; i < this.identifyCode.length; i++) {
 this.drawText(ctx, this.identifyCode[i], i)
 }
 this.drawLine(ctx)
 this.drawDot(ctx)
 },
 drawText(ctx, txt, i) {
 // 随机生产字体颜色
 ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
 // 随机生成字体大小
 ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
 let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
 let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
 var deg = this.randomNum(-45, 45)
 // 修改坐标原点和旋转角度
 ctx.translate(x, y)
 ctx.rotate(deg * Math.PI / 180)
 ctx.fillText(txt, 0, 0)
 // 恢复坐标原点和旋转角度
 ctx.rotate(-deg * Math.PI / 180)
 ctx.translate(-x, -y)
 },
 drawLine(ctx) {
 // 绘制干扰线
 for (let i = 0; i < 5; i++) {
 ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)
 ctx.beginPath()
 ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
 ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
 ctx.stroke()
 }
 },
 drawDot(ctx) {
 // 绘制干扰点
 for (let i = 0; i < 80; i++) {
 ctx.fillStyle = this.randomColor(0, 255)
 ctx.beginPath()
 ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
 ctx.fill()
 }
 }
 },
 watch: {
 identifyCode() {
 this.drawPic()
 }
 },
 mounted() {
 this.drawPic()
 }
}
</script>

步骤2 在子组件中进行注册和引用

<script>
  import SIdentify from "./common/sIdentify.vue";
  export default {
    components: { SIdentify },
  }
</script>

步骤3 在主页面中使用子组件

1、template中:

<template>
 <div class="code" @click="refreshCode">
  <s-identify :identifyCode="identifyCode"></s-identify>
 </div>
</template>

2、 data中:

data() {
 return {
   identifyCode: "",
   identifyCodes: "",
 }
},

3、methods中:

methods: {
  // 生成随机数
  randomNum(min, max) {
    max = max + 1
    return Math.floor(Math.random() * (max - min) + min);
  },
  // 更新验证码
  refreshCode() {
    this.identifyCode = "";
    this.makeCode(this.identifyCodes, 4);
    console.log('当前验证码==',this.identifyCode);
  },
  // 随机生成验证码字符串
  makeCode(data, len) {
    for (let i = 0; i < len; i++) {
      this.identifyCode += this.identifyCodes[this.randomNum(0, this.identifyCodes)]
    }
  },
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
vue+element实现动态加载表单
Dec 13 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
vue特效之翻牌动画
Apr 20 Vue.js
vue3+typeScript穿梭框的实现示例
Dec 29 #Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 #Vue.js
vue实现简易的双向数据绑定
Dec 29 #Vue.js
vue中配置scss全局变量的步骤
Dec 28 #Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 #Vue.js
Vue仿百度搜索功能
Dec 28 #Vue.js
vue中watch的用法汇总
Dec 28 #Vue.js
You might like
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python网站验证码识别
2016/01/25 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
python3.5绘制随机漫步图
2018/08/27 Python
django 中QuerySet特性功能详解
2019/07/25 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
个人委托书怎么写
2014/04/04 职场文书
商场周年庆活动方案
2014/08/19 职场文书
体育活动总结
2015/02/04 职场文书
入党积极分子考察意见
2015/06/02 职场文书
值班管理制度范本
2015/08/06 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle