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 相关文章推荐
firefox事件处理之自动查找event的函数(用于onclick=foo())
Aug 05 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
JS温故而知新之变量提升和时间死区
Jan 27 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
如何测量vue应用运行时的性能
Jun 21 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
Jan 17 Javascript
微信小程序实现导航栏和内容上下联动功能代码
Jun 29 Javascript
vant 中van-list的用法说明
Nov 11 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
我的论坛源代码(八)
2006/10/09 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js文件中调用js的实现方法小结
2009/10/23 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
js实现随机数字字母验证码
2017/06/19 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
JavaScript实现美化滑块效果
2019/05/17 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
软件测试面试题
2015/10/21 面试题
员工薪酬福利制度
2014/01/17 职场文书
抽样调查项目计划书
2014/04/24 职场文书
质量保证书范本
2014/04/29 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
Python 实现Mac 屏幕截图详解
2021/10/05 Python
Python中的程序流程控制语句
2022/02/24 Python