JavaScript使用canvas绘制随机验证码


Posted in Javascript onFebruary 17, 2020

本文实例为大家分享了使用canvas绘制随机验证码的具体代码,供大家参考,具体内容如下

理论基础:

掌握使用canvas绘制线条和圆形以及绘制文字

实现思路:

先构建一个画布,设置一定的宽高(在canvas中设置宽高和在style中设置是有区别的,建议直接在canvas标签中设置),封装一个生成随机数的方法,为线条和圆形的绘制设置随机的位置,既然是随机的,必然是有随机的区间,先获取画布的宽高,线条和圆的位置就是(0~画布的宽高区间)的随机位置,再定义一个随机字符,获取随机的索引值,即可生成随机的验证码。需要刷新,直接把以下代码封装在函数里,用一个事件触发即可。

源代码:

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport"
 content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>canvas验证码</title>
</head>
<body>
<canvas id="code" width="80" height="30" style="border: 1px solid #ccc"></canvas>

<script src="jq/jquery-3.2.1.min.js"></script>
<script>
 var canvasW=$("#code").width();
 var canvasH=$("#code").height();
 //获取任意区间随机数
 var getRandom=function (maxNum) {
 return Math.floor(Math.random()*maxNum);
 }
 //随机颜色
 var getColor=function () {
 var r=getRandom(256),
 g=getRandom(256),
 b=getRandom(256);
 return "rgb("+[r,g,b].join(',')+")";
 }
 var ctx=$("#code")[0].getContext("2d");
 var lineNum=3,arcNum=20;

 //绘制线
 for (var i=0;i<lineNum;i++){
 ctx.beginPath();
 ctx.moveTo(getRandom(canvasW),getRandom(canvasH));
 ctx.lineTo(getRandom(canvasW),getRandom(canvasH));
 ctx.strokeStyle=getColor();
 ctx.closePath();
 ctx.stroke();
 }
 //绘制点
 for (var i=0;i<arcNum;i++){
 ctx.beginPath();
 ctx.arc(getRandom(canvasW),getRandom(canvasH),1,0,2*Math.PI);
 ctx.fillStyle=getColor();
 ctx.closePath();
 ctx.fill();
 }
 //绘制验证码
 var codeTxt="ABCDEFGHIJKLIMNOPQRSTUVWSYZ1234567890";;
 for(var i=0;i<4;i++){
 var txt=codeTxt.split("")[getRandom(codeTxt.length)];
 //绘制验证码
 ctx.beginPath();
 ctx.font="23px 微软雅黑";
 ctx.fillStyle=getColor();
 ctx.fillText(txt,20*i,25);
 ctx.closePath();
 }
</script>
</body>
</html>

最终效果:

JavaScript使用canvas绘制随机验证码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
Oct 29 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
js如何获取兄弟、父类等节点
Jan 06 Javascript
extjs每个组件要设置唯一的ID否则会出错
Jun 15 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
Sep 01 Javascript
JQuery异步加载PartialView的方法
Jun 07 Javascript
JQuery学习总结【一】
Dec 01 Javascript
详解JS中遍历语法的比较
Apr 07 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
Apr 20 Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 Javascript
js抽奖转盘实现方法分析
May 16 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 Javascript
JavaScript中this的学习笔记及用法整理
Feb 17 #Javascript
Vue 中使用 typescript的方法详解
Feb 17 #Javascript
vue框架中props的typescript用法详解
Feb 17 #Javascript
JS通用方法触发点击事件代码实例
Feb 17 #Javascript
JS前端广告拦截实现原理解析
Feb 17 #Javascript
JavaScript代码异常监控实现过程详解
Feb 17 #Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
Feb 17 #Javascript
You might like
极典R601SW收音机
2021/03/02 无线电
删除无限级目录与文件代码共享
2006/07/12 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
详解php实现页面静态化原理
2017/06/21 PHP
客户端静态页面玩分页
2006/06/26 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
react 生命周期实例分析
2020/05/18 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
Python continue语句用法实例
2014/03/11 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
pip安装python库的方法总结
2019/08/02 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
如何进行Linux分区优化
2016/09/13 面试题
党员批评与自我批评
2014/02/12 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
行政复议答复书
2015/07/01 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
html5实现点击弹出图片功能
2021/07/16 HTML / CSS