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 相关文章推荐
IE的fireEvent方法概述及应用
Feb 22 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
Aug 01 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
javascript实现的元素拖动函数宿主为浏览器
Jul 21 Javascript
一段非常简单的js判断浏览器的内核
Aug 17 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
Oct 29 Javascript
利用js获取下拉框中所选的值
Dec 01 Javascript
react.js 获取真实的DOM节点实例(必看)
Apr 17 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
vue-cli随机生成port源码的方法
Sep 02 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 Javascript
HTML+JS实现在线朗读器
Feb 15 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 header示例代码(推荐)
2010/09/08 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
详解jQuery中的事件
2016/12/14 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
Python字典dict常用方法函数实例
2020/11/09 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
Europcar比利时:租车
2019/08/26 全球购物
金融行业职业生涯规划范文
2014/01/17 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
健康状况证明模板
2014/10/23 职场文书
年底个人总结范文
2015/03/10 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
Python序列化模块JSON与Pickle
2022/06/05 Python