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 相关文章推荐
JS 添加千分位与去掉千分位的示例
Jul 11 Javascript
js输出阴历、阳历、年份、月份、周示例代码
Jan 29 Javascript
用jQuery toggleClass 实现鼠标移上变色
May 14 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
JS简单生成随机数(随机密码)的方法
May 11 Javascript
vue实现添加与删除图书功能
Oct 07 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
JavaScript Canvas编写炫彩的网页时钟
Oct 16 Javascript
ES6的异步操作之promise用法和async函数的具体使用
Dec 06 Javascript
JS script脚本中async和defer区别详解
Jun 24 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
Sep 21 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
php自定义错误处理用法实例
2015/03/20 PHP
PHP发送短信代码分享
2015/08/11 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
DOM事件探秘篇
2017/02/15 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
Python计算字符宽度的方法
2016/06/14 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
python使用mysql的两种使用方式
2018/03/07 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
python实现Zabbix-API监控
2018/09/17 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
django model通过字典更新数据实例
2020/04/01 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python 中如何写注释
2020/08/28 Python
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
服务员自我评价
2014/01/25 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
家长给学校的建议书
2014/05/15 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技