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
Two cases: 1. With index 2. Without index Prerequ...
JSON (JavaScript Object Notation, JS Object Notat...
1. Introduction Oracle has released MySQL 8.0GA. ...
This article shares the specific code for React t...
Table of contents Some basic instructions 1. Chec...
Background Controller @RequestMapping("/getP...
The installation process of VMwarea will not be d...
When exporting data to operations, it is inevitab...
Steps: 1. Install MySQL database 1. Download the ...
Table of contents Tutorial Series 1. Install Mari...
When I was working on a project recently, I found...
Transactions ensure the atomicity of multiple SQL...
Single page application characteristics "Ass...
Occasionally you'll see characters such as ...
transform:scale() can achieve proportional zoomin...