zoukankan      html  css  js  c++  java
  • vue3+canvas随机生成4位验证码

    在这里插入图片描述

    <template>
      <div class="img-verify">
        <canvas ref="verify" :width="width" :height="height" @click="handleDraw"></canvas>
      </div>
    </template>
    n 
    <script type="text/ecmascript-6">
    import { reactive, onMounted, ref, toRefs } from 'vue'
    export default {
      setup() {
        const verify = ref(null)
        const state = reactive({
          pool: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', // 字符串
          width: 120, // canvas宽
          height: 40, // canvas高
        })
        onMounted(() => {
          // 初始化绘制图片验证码
              draw()
        })
        
        // 点击图片重新绘制
        const handleDraw = () => {
           draw()
        }
    
        // 随机数
        const randomNum = (min, max) => {
          return parseInt(Math.random() * (max - min) + min)
        }
        // 随机颜色
        const randomColor = (min, max) => {
          const r = randomNum(min, max)
          const g = randomNum(min, max)
          const b = randomNum(min, max)
          return `rgb(${r},${g},${b})`
        }
    
        // 绘制图片
        const draw = () => {
          const ctx = verify.value.getContext('2d')
          // 填充颜色
          ctx.fillStyle = randomColor(180, 230)
          // 填充的位置
          ctx.fillRect(0, 0, state.width, state.height)
          // 随机产生字符串,并且随机旋转
          for (let i = 0; i < 4; i++) {
            // 随机的一个字符
            const text = state.pool[randomNum(0, state.pool.length)]
            // 随机的字体大小
            const fontSize = randomNum(18, 40)
            // 字体随机的旋转角度
            const deg = randomNum(-30, 30)
            ctx.font = fontSize + 'px Simhei'
            ctx.textBaseline = 'top'
            ctx.fillStyle = randomColor(80, 150)
            ctx.save()
            ctx.translate(30 * i + 15, 15)
            ctx.rotate((deg * Math.PI) / 180)
            ctx.fillText(text, -15 + 5, -15)
            ctx.restore()
          }
        }
        return {
          ...toRefs(state),
          verify,
          handleDraw
        }
      }
    }
    </script>
    <style type="text/css">
    .img-verify canvas {
      cursor: pointer;
    }
    </style>
    
  • 相关阅读:
    EXT--columnWidth
    EXT经验--查询items的xtype
    修改VS解决方案及工程名,解决如何打开高/版本VS项目
    jQuery Ajax 全解析(转)
    MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
    .net框架版本说明
    [Ajax] 使用Ajax异步上传图片文件(非Form表单提交)
    CodeSmith 7.01破解下载
    jQuery插件之Cookie
    Oracle笔记 目录索引
  • 原文地址:https://www.cnblogs.com/cupid10/p/15617586.html
Copyright © 2011-2022 走看看