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 相关文章推荐
Div Select挡住的解决办法
Aug 07 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
Apr 15 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
JQuery中DOM实现事件移除的方法
Jun 13 Javascript
详解JavaScript中的自定义事件编写
May 10 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 Javascript
利用Angularjs实现幻灯片效果
Sep 07 Javascript
基于JavaScript实现前端文件的断点续传
Oct 17 Javascript
javascript简易画板开发
Apr 12 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
ES6箭头函数和扩展实例分析
May 23 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
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
php三元运算符知识汇总
2015/07/02 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
jquery异步循环获取功能实现代码
2010/09/19 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
python字符串编码识别模块chardet简单应用
2015/06/15 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
python win32 简单操作方法
2017/05/25 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
车辆维修工自我评价怎么写
2013/09/20 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
环卫个人总结
2015/03/03 职场文书
2015年外联部工作总结
2015/04/03 职场文书