js+canvas绘制图形验证码


Posted in Javascript onSeptember 21, 2020

本文实例为大家分享了利用canvas绘制图形验证码的具体代码,供大家参考,具体内容如下

思路:通过随机获取指定字符串的指定数的字符,通过canvas绘制出来

返回指定范围的随机整数

//指定范围的随机函数:返回指定范围内的随机整数
function rand(min, max) {
    /*
    max=10
    min=1

      Math.random()=0  最小取到1
      Math.random()=0.9999*10=Math.floor(9.9)=>+1=10

    */
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

返回指定数量的随机字符串

function randStr(count) {
    var str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var code = '';
    for (var i = 0; i < count; i++) {

      var index = rand(0, str.length - 1)//必须减一否则会出现下标越界
      code += str.charAt(index) + ' ';
    }
    return code
  }

绘制图形

function verify(selector) {
    //获取canvas的dom对象
    var cas = document.querySelector(selector);
    //获取上下文对象
    var ctx = cas.getContext('2d');
    //指定接收的字符串
    var code = randStr(5);

    //绘制矩形,作背景色
    ctx.fillStyle = 'orange';
    //绘制实心矩形
    ctx.fillRect(0, 0, 160, 50)


    //文字居中
    // ctx.textAlign = 'left'
    //字体样式的属性要遵循css中的书写顺序
    ctx.font = '900 24px 宋体'
    //设置字体颜色
    ctx.fillStyle = '#FFF';
    //绘制文字
    ctx.fillText(code, 20, 30);
  }

鼠标点击更新验证码

document.querySelector('canvas').addEventListener('click', function () {
    verify('canvas')
  })

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>绘制图形验证码</title>
  <style>
    canvas {
      border: 1px solid red;
    }
  </style>
</head>

<body>
  <canvas width="160" height="50"></canvas>
</body>
<script>

  verify('canvas')
  document.querySelector('canvas').addEventListener('click', function () {
    verify('canvas')
  })
  function verify(selector) {
    //获取canvas的dom对象
    var cas = document.querySelector(selector);
    //获取上下文对象
    var ctx = cas.getContext('2d');
    //指定接收的字符串
    var code = randStr(5);

    //绘制矩形,作背景色
    ctx.fillStyle = 'orange';
    //绘制实心矩形
    ctx.fillRect(0, 0, 160, 50)

    //字体样式的属性要遵循css中的书写顺序
    ctx.font = '900 24px 宋体'
    //设置字体颜色
    ctx.fillStyle = '#FFF';
    //绘制文字
    ctx.fillText(code, 20, 30);
  }




  //指定范围的随机函数:返回指定范围内的随机整数
  function rand(min, max) {
    /*
    max=10
    min=1

      Math.random()=0  最小取到1
      Math.random()=0.9999*10=Math.floor(9.9)=>+1=10

    */
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

  //返回随机字符串
  function randStr(count) {
    var str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var code = '';
    for (var i = 0; i < count; i++) {

      var index = rand(0, str.length - 1)//必须减一否则会出现下标越界
      code += str.charAt(index) + ' ';
    }
    return code
  }
  // console.log(randStr(6))
</script>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 Javascript
基于jQuery的一个扩展form序列化到json对象
Dec 09 Javascript
一起来写段JS drag拖动代码
Dec 09 Javascript
使用原生js写的一个简单slider
Apr 29 Javascript
一个js过滤空格的小函数
Oct 10 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
Apr 20 Javascript
用JS动态改变表单form里的action值属性的两种方法
May 25 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
webpack踩坑之路图片的路径与打包
Sep 05 Javascript
微信小程序实现图片上传、删除和预览功能的方法
Dec 18 Javascript
基于Vue CSR的微前端实现方案实践
May 27 Javascript
vue中路由跳转不计入history的操作
Sep 21 #Javascript
JS实现放大镜效果
Sep 21 #Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 #Javascript
Vue Element校验validate的实例
Sep 21 #Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
Sep 21 #Javascript
vue3.0 上手体验
Sep 21 #Javascript
微信小程序实现点击页面出现文字
Sep 21 #Javascript
You might like
C#静态方法与非静态方法实例分析
2014/09/22 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
入团者的自我评价分享
2013/12/02 职场文书
高校十八大报告感想
2014/01/27 职场文书
工厂会计员职责
2014/02/06 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python