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 相关文章推荐
json原理分析及实例介绍
Nov 29 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
Dec 26 Javascript
Jquery带搜索框的下拉菜单
May 06 Javascript
open 动态修改img的onclick事件示例代码
Nov 13 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 Javascript
Zepto实现密码的隐藏/显示
Apr 07 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
vue左右侧联动滚动的实现代码
Jun 06 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
Sep 04 Javascript
微信小程序页面间传递数组对象方法解析
Nov 06 Javascript
如何用JavaScript实现一个数组惰性求值库
May 05 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
在Python中移动目录结构的方法
2016/01/31 Python
python 计算文件的md5值实例
2017/01/13 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python导入pandas具体步骤方法
2019/06/23 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
大学应届生求职简历的自我评价
2013/10/08 职场文书
毕业生自荐书模版
2014/01/04 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
经典公益广告词
2014/03/13 职场文书
《泉水》教学反思
2014/04/11 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
Redis Cluster 集群搭建你会吗
2021/08/04 Redis