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 相关文章推荐
jQuery 核心函数以及jQuery对象
Mar 23 Javascript
JavaScript实现在页面间传值的方法
Apr 07 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
jquery实现兼容IE8的异步上传文件
Jun 15 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
JavaScript实现的搜索及高亮显示功能示例
Aug 14 Javascript
Vue组件实例间的直接访问实现代码
Aug 20 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
Sep 13 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
vue在手机中通过本机IP地址访问webApp的方法
Aug 15 Javascript
vue组件通信传值操作示例
Jan 08 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
Feb 14 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模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
php限制ip地址范围的方法
2015/03/31 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
php扩展开发入门demo示例
2019/09/23 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
js module大战
2019/04/19 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
python实现比较文件内容异同
2018/06/22 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python super()函数使用及多重继承
2020/05/06 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
求职信格式范本
2013/11/15 职场文书
在校生自我鉴定
2014/01/23 职场文书
安全生产责任书范本
2014/04/15 职场文书
美容院合作经营协议书
2014/10/10 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
MySQL如何使备份得数据保持一致
2022/05/02 MySQL