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 相关文章推荐
js中有关IE版本检测
Jan 04 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
Nov 23 Javascript
JavaScript中各种引用类型的常用操作方法小结
May 05 Javascript
jQuery zTree树插件简单使用教程
Jan 10 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
Jan 17 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
Jul 12 jQuery
JSONP原理及应用实例详解
Sep 13 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
浅谈vue中resetFields()使用注意事项
Aug 12 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
深入PHP变量存储的详解
2013/06/13 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
js输出列表实现代码
2010/09/12 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
Python中暂存上传图片的方法
2015/02/18 Python
python正则表达式之对号入座篇
2018/07/24 Python
python读取指定字节长度的文本方法
2019/08/27 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
laravel使用redis队列实例讲解
2021/03/23 PHP
2014学雷锋活动心得体会
2014/03/10 职场文书
公司联欢会策划方案
2014/05/19 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
上班旷工检讨书
2015/08/15 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
python实现语音常用度量方法的代码详解
2021/05/25 Python