如何在vue中使用图形验证码
生活随笔
收集整理的這篇文章主要介紹了
如何在vue中使用图形验证码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先在component問價夾下創建一個新文件夾并叫identity,并在里面編寫組件
<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: 16},fontSizeMax: {type: Number,default: 40},backgroundColorMin: {type: Number,default: 180},backgroundColorMax: {type: Number,default: 240},colorMin: {type: Number,default: 50},colorMax: {type: Number,default: 160},lineColorMin: {type: Number,default: 40},lineColorMax: {type: Number,default: 180},dotColorMin: {type: Number,default: 0},dotColorMax: {type: Number,default: 255},contentWidth: {type: Number,default: 112},contentHeight: {type: Number,default: 38}},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 < 8; 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 < 50; 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>在main.js中將它變成全局組件方便調用
import Identity from '@/components/identify/identify.vue' Vue.component('identity',Identity)然后在你想使用的組件頁面中直接寫,identifyCode代表的是你的驗證碼
<identity :identifyCode="identifyCode"></identity> <script> export default {name: 'Home',data(){return{identifyCodes: "1234567890",identifyCode: ""}},components: {},mounted(){this.refreshCode()//刷新生成隨機驗證碼的方法},methods:{/*圖形驗證碼 */randomNum(min,max){return Math.floor(Math.random() * (max - min) + min);},refreshCode(){this.identifyCode = "";this.makeCode( this.identifyCodes,4);console.log('當前驗證嗎',this.identifyCode);},makeCode(o,l){for(let i =0;i<l;i++){this.identifyCode += this.identifyCodes[this.randomNum(0,this.identifyCodes.length)]}}} } </script>總結
以上是生活随笔為你收集整理的如何在vue中使用图形验证码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上市价 3599 元:极空间 Z4s 四
- 下一篇: 努比亚总裁:手机行业在集体“摆烂” 旗舰