文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue如何实现登录时图形验证码

2023-06-29 09:17

关注

这篇文章主要介绍vue如何实现登录时图形验证码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

效果图:

点击图案可以切换字符

vue如何实现登录时图形验证码vue如何实现登录时图形验证码

1.新建 Identify.vue 组件

<template>  <div>  <canvas      id="s-canvas"      :width="contentWidth"      :height="contentHeight"></canvas>  </div></template><script>export default {  name: "identify",  props: {    identifyCode: {      type: String,      default: ''    },    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: 130    },    contentHeight: {      type: Number,      default: 40    }  },  methods:{    // 生成一个随机数    randomNum (min, max) {      return Math.floor(Math.random() * (max - min) + min)    },    // 生成一个随机的颜色    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'      // 绘制背景      ctx.fillStyle = this.randomColor(          this.backgroundColorMin,          this.backgroundColorMax      )      ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)      // 绘制文字      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'      let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))      let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)      let deg = this.randomNum(-30, 30)      // 修改坐标原点和旋转角度      ctx.translate(x, y)      ctx.rotate(deg * Math.PI / 270)      ctx.fillText(txt, 0, 0)      // 恢复坐标原点和旋转角度      ctx.rotate(-deg * Math.PI / 270)      ctx.translate(-x, -y)    },    drawLine (ctx) {      // 绘制干扰线      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) {      // 绘制干扰点      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;}</style>

2.在父组件 index.vue注册使用

<template>    <div @click="refreshCode" >        <Identify :identifyCode="identifyCode" ></Identify>    </div></template><script>import Identify from '@/components/test/identify'export default {  name: "index",  components:{   Identify   },  data(){      return {         identifyCode: '',      // 验证码规则      identifyCodes: '123456789ABCDEFGHGKMNPQRSTUVWXYZ',    }   },  methods:{    // 切换验证码    refreshCode() {      this.identifyCode = ''      this.makeCode(this.identifyCodes, 4)      console.log(this.identifyCode)    },    // 生成随机验证码    makeCode(o, l) {      for (let i = 0; i<l; i++) {        this.identifyCode += this.identifyCodes[            Math.floor(Math.random() * (this.identifyCodes.length - 0) + 0)            ]      }    },    mounted() {        this.refreshCode()  }}</script><style scoped></style>

以上是“vue如何实现登录时图形验证码”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯