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

Solution to Docker's failure to release ports

Today I encountered a very strange situation. Aft...

Implementation of mounting NFS shared directory in Docker container

Previously, https://www.jb51.net/article/205922.h...

Solving problems encountered when importing and exporting Mysql

background Since I converted all my tasks to Dock...

Four methods of using JS to determine data types

Table of contents Preface 1. typeof 2. instanceof...

About installing python3.8 image in docker

Docker Hub official website 1. Search for Python ...

JavaScript to make the picture move with the mouse

This article shares the specific code of JavaScri...

vue uses Ele.me UI to imitate the filtering function of teambition

Table of contents Problem Description The general...

Summary of MySQL Undo Log and Redo Log

Table of contents Undo Log Undo Log Generation an...

Understand CSS3 Grid layout in 10 minutes

Basic Introduction In the previous article, we in...

CenterOS7 installation and configuration environment jdk1.8 tutorial

1. Uninstall the JDK that comes with centeros fir...

Usage and best practice guide for watch in Vue3

Table of contents Preface🌟 1. API Introduction 2....

A brief analysis of the use of watchEffect in Vue3

Preface Everyone should be familiar with the watc...

Solution to the ineffective global style of the mini program custom component

Table of contents Too long to read Component styl...

JavaScript imitates Jingdong magnifying glass special effects

This article shares the specific code of JavaScri...