验证码(原生js加canvas绘图)

简介: 验证码(原生js加canvas绘图)
<style>
    * {
      padding: 0;
      margin: 0;
    }
    #a {
      width: 100%;
      height: 200px;
      background-color: #F5F5F5;
      display: flex;
      align-items: center;
      justify-content: center;
      position: absolute;
    }
    input {
      width: 200px;
      height: 40px;
      border: none;
      outline: none;
      margin-right: 10px;
      border-radius: 10px;
      font-size: 20px;
      color: #758BBC;
    }
    canvas {
      background-color: azure;
      border-radius: 10px;
    }
    #b {
      width: 100px;
      height: 40px;
      border: 0.2px #CCCCCC solid;
      position: absolute;
      left: 46%;
      top: 140px;
      border-radius: 10px;
      color: red;
      font-size: 20px;
      display: flex;
      justify-content: center;
      align-items: center;
      user-select: none;
    }
  </style>
  <body>
    <!-- 主 -->
    <div id="a">
      <!-- 验证框 -->
      <input type="text" placeholder="请输入">
      <!-- canvas画布 -->
      <canvas style="width: 90px; height: 40px;" onclick="ak()"></canvas>
      <!-- 提交 -->
      <div id="b" onclick="fn()">
        <span>提交</span>
      </div>
    </div>
    <script>
      // 获取到input的value
      let ma = document.getElementsByTagName("input")[0];
      let mb = document.getElementsByTagName("canvas")[0];
      let width = mb.width;
      let height = mb.height;
      let arrs = 0;
      // 创建个数组
      let arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b',
        'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
        'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
        'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
        'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
      ];
      // 封装一个函数(生成随机数)
      function fzs() {
        // 生成4个值
        let arra = '';
        for (let i = 0; i < 4; i++) {
          let index = nb(0, arr.length - 1);
          arra += arr[index];
        }
        return arra;
      }
      // 循环判断验证码
      function fn() {
        let maValue = ma.value;
        arras.toLowerCase();
        maValue.toLowerCase();
        if (maValue == '') {
          alert('没有输入值');
        }
        if (maValue === arras) {
          alert("正确");
        } else {
          alert("账号或密码错误");
        }
      }
      // 画布
      function fz() {
        // 调用随机数
        let arra = fzs();
        // 赋给全局变量的值
        arras = arra;
        // 转化为2d绘图
        let mbs = mb.getContext("2d");
        // 背景颜色
        mbs.fillStyle = "#fff";
        // 绘制一个实心的矩形
        mbs.fillRect(0, 0, 300, 150);
        // 循环样式
        for (let i = 0; i < 4; i++) {
          // 调用随机颜色
          mbs.fillStyle = qwe(0, 255);
          // 设置字体  粗细 大小 样式
          mbs.font = "900 100px 宋体";
          // 必须放在后面不然第一个无效果(必须加i*50 切换位置不然会叠加)
          mbs.fillText(arra[i], 50 + i * 50, 100);
        }
        /**绘制干扰线**/
        for (let i = 0; i < 5; i++) {
          mbs.strokeStyle = nb(40, 180);
          mbs.beginPath();
          mbs.moveTo(nb(0, width / 2), nb(0, height / 2));
          mbs.lineTo(nb(0, width / 2), nb(0, height));
          mbs.stroke();
        }
        /**绘制干扰点**/
        for (let i = 0; i < 50; i++) {
          mbs.fillStyle = nb(255);
          mbs.beginPath();
          mbs.arc(nb(0, width), nb(0, height), 1, 0, 2 * Math.PI);
          mbs.fill();
        }
      }
      // 随机颜色
      function qwe(min, max) {
        let a = nb(min, max);
        let b = nb(min, max);
        let c = nb(min, max);
        return " rgb( " + a + "," + b + "," + c + " ) ";
      }
      // 调用画布
      fz();
      // 点击刷新
      function ak() {
        fz();
      }
      // 随机数范围
      function nb(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min
      }
    </script>
相关文章
|
22天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
3月前
|
JavaScript
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
61 1
|
22天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
4月前
|
前端开发 JavaScript 索引
|
5天前
|
JavaScript 前端开发 BI
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
9 1
|
8天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
22天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
2月前
|
前端开发 JavaScript 容器
编程笔记 html5&css&js 032 HTML Canvas
编程笔记 html5&css&js 032 HTML Canvas
|
3月前
|
前端开发 JavaScript 开发者
Canvas库 fabric.js可以实现哪些功能? 动图介绍
fabric.js是一个canvas库,今天整理了一下fabric.js可以实现的功能,用动图的形式分享给大家,方便快速了解fabric.js。
Canvas库 fabric.js可以实现哪些功能? 动图介绍
|
4月前
|
JavaScript 前端开发
jsjs原生 JavaScript轮播图 渐变淡入淡出
jsjs原生 JavaScript轮播图 渐变淡入淡出