This article example shares the specific code of Vue to implement graphic verification code login for your reference. The specific content is as follows 1. Rendering 2. Create a new file identify.vue under components, with the following content: <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: 28 }, 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: 40 } }, methods: { // Generate a random number randomNum (min, max) { return Math.floor(Math.random() * (max - min) + min) }, // Generate a random color randomColor (min, max) { var r = this.randomNum(min, max) var g = this.randomNum(min, max) var b = this.randomNum(min, max) return 'rgb(' + r + ',' + g + ',' + b + ')' }, drawPic() { var canvas = document.getElementById('s-canvas') var ctx = canvas.getContext('2d') ctx.textBaseline = 'bottom' // Draw the background ctx.fillStyle = this.randomColor( this.backgroundColorMin, this.backgroundColorMax ) ctx.fillRect(0, 0, this.contentWidth, this.contentHeight) // Draw text 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' var x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1)) var y = this.randomNum(this.fontSizeMax, this.contentHeight - 5) var deg = this.randomNum(-30, 30) // Modify the coordinate origin and rotation angle ctx.translate(x, y) ctx.rotate(deg * Math.PI / 270) ctx.fillText(txt, 0, 0) // Restore the coordinate origin and rotation angle ctx.rotate(-deg * Math.PI / 270) ctx.translate(-x, -y) }, drawLine (ctx) { // Draw interference lines for (let i = 0; i < 2; 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) { // Draw interference points for (let i = 0; i < 20; 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> <style lang='scss' scoped> .s-canvas { height: 38px; } .s-canvas canvas{ margin-top: 1px; margin-left: 8px; } </style> 3. Page introduction <script> import SIdentify from '../../components/identify' export default { components: { SIdentify } } data() { // Verification code custom verification rules const validateVerifycode = (rule, value, callback) => { const newVal = value.toLowerCase() const identifyStr = this.identifyCode.toLowerCase() if (newVal === '') { callback(new Error('Please enter the verification code')) } else if (newVal !== identifyStr) { console.log('validateVerifycode:', value) callback(new Error('Verification code is incorrect!')) } else { callback() } } return { identifyCodes: '3456789ABCDEFGHGKMNPQRSTUVWXY', identifyCode: '', ruleForm: { userName: '', password: '', verifycode: '' }, rules: verifycode: { required: true, trigger: 'blur', validator: validateVerifycode } ] } } } </script> 4.html <el-form-item prop="verifycode"> <div style="display:flex"> <el-input v-model="ruleForm.verifycode" placeholder="Please enter the verification code" @keyup.enter.native="login('ruleForm')" ></el-input> <span @click="refreshCode" ><s-identify :identifyCode="identifyCode"></s-identify ></span> </div> </el-form-item> 5. mounted mounted() { //Verification code initialization this.identifyCode = '' this.makeCode(this.identifyCodes, 4) } 6. Methods methods: { // Generate random number randomNum(min, max) { return Math.floor(Math.random() * (max - min) + min) }, // Switch verification code refreshCode() { this.identifyCode = '' this.makeCode(this.identifyCodes, 4) }, // Generate a four-digit random verification code makeCode(o, l) { for (let i = 0; i < l; i++) { this.identifyCode += this.identifyCodes[ this.randomNum(0, this.identifyCodes.length) ] } } } The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM. You may also be interested in:
|
<<: MySQL implements enterprise-level log management, backup and recovery practical tutorial
>>: Detailed explanation of the whole process of building a personal blog with nginx+WordPress
Today I encountered a very strange situation. Aft...
Previously, https://www.jb51.net/article/205922.h...
background Since I converted all my tasks to Dock...
Table of contents Preface 1. typeof 2. instanceof...
Docker Hub official website 1. Search for Python ...
This article shares the specific code of JavaScri...
Table of contents Problem Description The general...
Table of contents Undo Log Undo Log Generation an...
Basic Introduction In the previous article, we in...
1. Uninstall the JDK that comes with centeros fir...
1. In the previous chapter, we learned that we ca...
Table of contents Preface🌟 1. API Introduction 2....
Preface Everyone should be familiar with the watc...
Table of contents Too long to read Component styl...
This article shares the specific code of JavaScri...