Vue implements graphic verification code login

Vue implements graphic verification code login

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:
  • Vue implementation of verification code login method example
  • Vue implements mobile phone verification code login
  • Use vue to realize the registration page effect vue to realize SMS verification code login
  • Vue implements mobile phone number and verification code login (60s countdown disabled)
  • Vue implements SMS verification code login function (process detailed explanation)
  • Vue implements sample code for sending SMS verification code login via mobile phone number

<<:  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

Recommend

Determine whether MySQL update will lock the table through examples

Two cases: 1. With index 2. Without index Prerequ...

Best way to replace the key in json object

JSON (JavaScript Object Notation, JS Object Notat...

React implements paging effect

This article shares the specific code for React t...

Some basic instructions of docker

Table of contents Some basic instructions 1. Chec...

How to receive binary file stream in Vue to realize PDF preview

Background Controller @RequestMapping("/getP...

VMwarea virtual machine installation win7 operating system tutorial diagram

The installation process of VMwarea will not be d...

Mysql implements three functions for field splicing

When exporting data to operations, it is inevitab...

MySQL green decompression version installation and configuration steps

Steps: 1. Install MySQL database 1. Download the ...

MariaDB-server installation of MySQL series

Table of contents Tutorial Series 1. Install Mari...

CSS3+HTML5+JS realizes the shrinking and expanding animation effect of a block

When I was working on a project recently, I found...

The difference between MySQL database stored procedures and transactions

Transactions ensure the atomicity of multiple SQL...

Talk about how to identify HTML escape characters through code

Occasionally you'll see characters such as &#...