This article example shares the specific code of Vue to implement the graphic verification code for your reference. The specific content is as follows Effect picture:or or or Code:Verification code component: src/common/sIdentify.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: 18 }, 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: 111 }, contentHeight: { type: Number, default: 38 } }, methods: { // Generate a random number randomNum(min, max) { return Math.floor(Math.random() * (max - min) + min) }, // Generate a random color 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' // 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) // Draw interference line // this.drawDot(ctx) // Draw interference point}, // Draw text 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(-30, 30) // Character rotation angle (preferably no more than 45 degrees) // Modify the coordinate origin and rotation angle ctx.translate(x, y) ctx.rotate(deg * Math.PI / 180) ctx.fillText(txt, 0, 0) // Restore the coordinate origin and rotation angle ctx.rotate(-deg * Math.PI / 180) ctx.translate(-x, -y) }, drawLine(ctx) { // Draw interference lines 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) { // Draw interference points for (let i = 0; i < 100; 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> Parent Component <template> <div> <div>Verification code test</div> <div @click="refreshCode()" class="code" style="cursor:pointer;" title="Click to switch verification code"> <s-identify :identifyCode="identifyCode"></s-identify> </div> </div> </template> <script> import { defineComponent } from 'vue'; import sIdentify from "@/common/sIdentify.vue"; // import axios from 'axios' export default defineComponent({ name: 'WatermarkTest', components: { sIdentify }, data() { return { identifyCode: "", identifyCodes: ['0','1','2','3','4','5','6','7','8','9','a','b','c','d'], //Add the characters you want according to actual needs} }, mounted() { this.refreshCode() }, unmounted() { }, methods: { // Generate random number randomNum(min, max) { max = max + 1 return Math.floor(Math.random() * (max - min) + min); }, // Update verification code refreshCode() { this.identifyCode = ""; this.makeCode(this.identifyCodes, 4); console.log('Current verification code:',this.identifyCode); }, // Randomly generate verification code string makeCode(data, len) { console.log('data, len:', data, len) for (let i = 0; i < len; i++) { this.identifyCode += this.identifyCodes[this.randomNum(0, this.identifyCodes.length-1)] } }, }, }); </script> 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:
|
<<: In-depth analysis of the slow query problem of MySQL Sending data
>>: How to set up Referer in Nginx to prevent image theft
Authorization is to grant certain permissions to ...
MySQL escape Escape means the original semantics ...
Table of contents 1. What is an index signature? ...
The MySQL database does not have an incremental b...
After the green version of mysql5.6 is decompress...
Do you add an alt attribute to the img image tag? ...
Preface Samba is a free software that implements ...
A Thorough Analysis of HTML (14) Special Characte...
<br />A great blog post by PPK two years ago...
Table property settings that work well: Copy code ...
When we use TypeScript, we want to use the type s...
Table of contents useMemo useCallback useMemo We ...
It has been three or four months since I joined Wo...
This article example shares the specific code of ...
Several Differences Between MySQL 5.x and MySQL 8...