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+jquery实现无限极联动
May 23 Javascript
js获取和设置属性的方法
Feb 20 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
Jun 13 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
AngularJs expression详解及简单示例
Sep 01 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 Javascript
vue.js 添加 fastclick的支持方法
Aug 28 Javascript
Vue.extend 编程式插入组件的实现
Nov 18 Javascript
Threejs实现滴滴官网首页地球动画功能
Jul 13 Javascript
javascript中闭包closure的深入讲解
Mar 03 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
APMServ使用说明
2006/10/23 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
python实现石头剪刀布程序
2021/01/20 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
wxPython实现文本框基础组件
2019/11/18 Python
python中count函数简单的实例讲解
2020/02/06 Python
会计学应届毕业生推荐信
2013/11/04 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
三八节活动简报
2015/07/20 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
导游词之广西漓江
2019/11/02 职场文书