验证码(原生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>
相关文章
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
33 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
3月前
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
本文介绍了一个使用JavaScript和HTML5 Canvas API实现的贪吃蛇游戏的升级版本,该版本支持PC端和移动端,提供了丝滑的转向效果,并允许玩家通过键盘或触摸屏控制蛇的移动。代码中包含了详细的注释,解释了游戏逻辑、食物生成、得分机制以及如何响应不同的输入设备。
71 1
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
|
3月前
|
移动开发 前端开发 JavaScript
js之Canvas|2-1
js之Canvas|2-1
|
3月前
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏
本文通过详细的代码示例介绍了如何使用JavaScript和HTML5的Canvas API实现一个贪吃蛇游戏,包括蛇的移动、食物的生成、游戏的开始与结束逻辑,以及如何响应键盘事件来控制蛇的方向。
48 1
|
3月前
|
移动开发 前端开发 JavaScript
原生JavaScript+canvas实现五子棋游戏_值得一看
本文介绍了如何使用原生JavaScript和HTML5的Canvas API实现五子棋游戏,包括棋盘的绘制、棋子的生成和落子、以及判断胜负的逻辑,提供了详细的代码和注释。
44 0
原生JavaScript+canvas实现五子棋游戏_值得一看
|
4月前
|
资源调度 JavaScript API
nest.js + sms 实现短信验证码登录
本文介绍了在Nest.js框架中集成短信验证码登录的实现方案,详细阐述了使用阿里云短信服务的配置流程、资质申请、短信模板设置,并提供了API调用示例和工程代码的运行步骤。
nest.js + sms 实现短信验证码登录
|
4月前
|
JavaScript 前端开发
js随机验证码
js随机验证码
41 2
|
4月前
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
43 0
|
4月前
|
JavaScript 前端开发 API
从零开始学表单操作,jQuery 与原生 JavaScript 完全指南,带你轻松掌握网页交互关键!
【8月更文挑战第31天】在网页开发中,表单是实现用户互动的关键元素。无论是收集信息、提交数据还是验证输入,都需要对表单进行有效操作。本文档介绍了如何使用原生 JavaScript 和 jQuery 操作表单,包括获取表单元素、读写表单值、处理表单提交及验证等核心功能。jQuery 提供了更简洁的语法和更好的兼容性,但原生 JavaScript 在性能上有优势。选择合适的方法取决于项目需求和个人偏好。下面通过具体示例展示了两种方式的操作方法。
42 0