JS+HTML5 canvas绘制验证码示例


Posted in Javascript onDecember 05, 2018

本文实例讲述了JS+HTML5 canvas绘制验证码。分享给大家供大家参考,具体如下:

css样式:

<style>
body{
  text-align: center;
}
canvas{
  background:#ddd;
}
</style>

HTML部分:

body中添加标签canvas:

<canvas id="c3"></canvas>

js部分:

//创建两个变量保存验证码的宽度和高度
  var w = 120;
  var h = 30;
//将变量值赋值给canvas
  c3.width = w;
  c3.height = h;
//获取画笔
  var ctx = c3.getContext("2d");
//创建两个函数,返回指定范围内的随机数,随机颜色
//随机数
  function rn(min,max){
    var n = Math.random()*(max-min)+min;
    return Math.floor(n);
  }
//随机颜色
  function rc(min,max){
    var r = rn(min,max);
    var g = rn(min,max);
    var b = rn(min,max);
    return `rgb(${r},${g},${b})`;
}
//填充的背景
  ctx.fillStyle=rc(180,230);
  ctx.fillRect(0,0,w,h);
//创建一个随机的文字[字母和数字]4个
  var pool = "ABCDEFGHIJKabced胡歌0123456789哈哼哈哈";
  var str ="";
  for(var i = 0;i<4;i++){
    var index = Math.floor(Math.random()*pool.length);
    str +=pool[index];
}
//console.log(str);
  ctx.font = "30px SimHei";
  ctx.fillStyle = rc(80,180);//文字颜色
  ctx.textBaseline="top";
  ctx.fillText(str,20,0);//在(20,0)处开始填充文字
//绘制6条干扰线
  for(var i = 0;i<6;i++){
    ctx.strokeStyle = rc(0,255);
    ctx.beginPath();
    ctx.moveTo(rn(0,w),rn(0,h));
    ctx.lineTo(rn(0,w),rn(0,h));
    ctx.stroke();
  }
//绘制50个干扰点
  for(var i = 0;i<50;i++){
    ctx.fillStyle = rc(0,255);
    ctx.beginPath();
    ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
    ctx.fill();
  }

感兴趣的朋友可以使用在线HTML/CSS/JavaScript前端代码调试运行工具:http://tools.3water.com/code/WebCodeRun,测试上述代码运行效果。

或者使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun,测试如下完整示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>3water.com canvas绘制验证码</title>
<style>
body{
  text-align: center;
}
canvas{
  background:#ddd;
}
</style>
</head>
<body>
<canvas id="c3"></canvas>
<script>
//创建两个变量保存验证码的宽度和高度
  var w = 120;
  var h = 30;
//将变量值赋值给canvas
  c3.width = w;
  c3.height = h;
//获取画笔
  var ctx = c3.getContext("2d");
//创建两个函数,返回指定范围内的随机数,随机颜色
//随机数
  function rn(min,max){
    var n = Math.random()*(max-min)+min;
    return Math.floor(n);
  }
//随机颜色
  function rc(min,max){
    var r = rn(min,max);
    var g = rn(min,max);
    var b = rn(min,max);
    return `rgb(${r},${g},${b})`;
}
//填充的背景
  ctx.fillStyle=rc(180,230);
  ctx.fillRect(0,0,w,h);
//创建一个随机的文字[字母和数字]4个
  var pool = "ABCDEFGHIJKabced胡歌0123456789哈哼哈哈";
  var str ="";
  for(var i = 0;i<4;i++){
    var index = Math.floor(Math.random()*pool.length);
    str +=pool[index];
}
//console.log(str);
  ctx.font = "30px SimHei";
  ctx.fillStyle = rc(80,180);//文字颜色
  ctx.textBaseline="top";
  ctx.fillText(str,20,0);//在(20,0)处开始填充文字
//绘制6条干扰线
  for(var i = 0;i<6;i++){
    ctx.strokeStyle = rc(0,255);
    ctx.beginPath();
    ctx.moveTo(rn(0,w),rn(0,h));
    ctx.lineTo(rn(0,w),rn(0,h));
    ctx.stroke();
  }
//绘制50个干扰点
  for(var i = 0;i<50;i++){
    ctx.fillStyle = rc(0,255);
    ctx.beginPath();
    ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
    ctx.fill();
  }
</script>
</body>
</html>

运行结果如下:

JS+HTML5 canvas绘制验证码示例

更多关于JavaScript相关内容还可查看本站专题:《JavaScript+HTML5特效与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
ASP中用Join和Array,可以加快字符连接速度的代码
Aug 22 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
JS使用单链表统计英语单词出现次数
Jun 16 Javascript
jquery siblings获取同辈元素用法实例分析
Jul 25 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
JS装饰器函数用法总结
Apr 21 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
VUEX-action可以修改state吗
Nov 19 Javascript
js实现左右轮播图
Jan 09 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
Dec 05 #Javascript
JS实现简单的点赞与踩功能示例
Dec 05 #Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 #Javascript
vue组件之间通信实例总结(点赞功能)
Dec 05 #Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 #Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 #Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 #Javascript
You might like
并发下常见的加锁及锁的PHP具体实现代码
2010/10/12 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
求得div 下 img的src地址的js代码
2007/02/28 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
django认证系统 Authentication使用详解
2019/07/22 Python
django 类视图的使用方法详解
2019/07/24 Python
Django配置文件代码说明
2019/12/04 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
给老师的检讨书
2014/02/11 职场文书
岗位说明书范文
2014/05/07 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
感谢信模板大全
2015/01/23 职场文书
办公室文员岗位职责
2015/02/04 职场文书
党员个人总结范文
2015/02/14 职场文书
教你用python实现12306余票查询
2021/06/30 Python