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 相关文章推荐
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
Dec 03 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
May 07 Javascript
纯JS实现本地图片预览的方法
Jul 31 Javascript
JavaScript字符串检索字符的方法
Jun 23 Javascript
使用JavaScript根据图片获取条形码的方法
Jul 04 Javascript
跟混乱的页面弹窗说再见
Apr 11 Javascript
微信小程序自定义toast组件的方法详解【含动画】
May 11 Javascript
Electron vue的使用教程图文详解
Jul 05 Javascript
ES6如何用一句代码实现函数的柯里化
Jan 18 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 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+MSSQL分页的例子
2006/10/09 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
JS的反射问题
2010/04/07 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
python读取csv文件示例(python操作csv)
2014/03/11 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
Python实现k-means算法
2018/02/23 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
在django中,关于session的通用设置方法
2019/08/06 Python
python3实现弹弹球小游戏
2019/11/25 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
文员个人求职自荐信
2013/09/21 职场文书
初入社会应届生求职信
2013/11/18 职场文书
商业项目策划方案
2014/06/05 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL