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 相关文章推荐
javascript 表单规则集合对象
Jul 21 Javascript
关于js数组去重的问题小结
Jan 24 Javascript
深入理解JavaScript中的对象
Jun 04 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
Mar 07 Javascript
jQuery使用正则验证15/18身份证的方法示例
Apr 27 jQuery
Vue中的ref作用详解(实现DOM的联动操作)
Aug 21 Javascript
Es6 Generator函数详细解析
Feb 24 Javascript
js中apply()和call()的区别与用法实例分析
Aug 14 Javascript
vue+elementUI组件table实现前端分页功能
Nov 15 Javascript
微信小程序停止其他视频播放当前视频的实例代码
Dec 25 Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 25 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
Python实现的爬虫功能代码
2017/06/24 Python
如何用Python 加密文件
2020/09/10 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
Linux的文件类型
2012/03/07 面试题
幼儿园保育员辞职信
2014/01/12 职场文书
人事部岗位职责范本
2014/03/05 职场文书
应届大专生自荐书
2014/06/16 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
投资申请报告
2015/05/19 职场文书
地道战观后感2000字
2015/06/04 职场文书
导游词之介休绵山
2019/12/31 职场文书