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 相关文章推荐
非常不错的一个javascript 类
Nov 07 Javascript
用JavaScript脚本实现Web页面信息交互
Dec 21 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
JavaScript中用let语句声明作用域的用法讲解
May 20 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
ionic使用angularjs表单验证(模板验证)
Dec 12 Javascript
微信小程序中悬浮窗功能的实现代码
Aug 02 Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 Javascript
js简单粗暴的发布订阅示例代码
Jan 23 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下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
php强制下载类型的实现代码
2011/04/21 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
python获取网页状态码示例
2014/03/30 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
在keras里实现自定义上采样层
2020/06/28 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
贷款承诺书
2015/01/20 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
校园安全教育心得体会
2016/01/15 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python