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 相关文章推荐
Jquery操作Select 简单方便 一个js插件搞定
Nov 12 Javascript
js location.replace与location.reload的区别
Sep 08 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
Mar 01 Javascript
浅谈Javascript事件处理程序的几种方式
Jun 27 Javascript
jQuery Mobile 和 Kendo UI 的比较
May 05 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
BootStrap树状图显示功能
Nov 24 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 Javascript
bootstrap选项卡扩展功能详解
Jun 14 Javascript
Vue 组件修改根实例的数据的方法
Apr 02 Javascript
JS实现4位随机验证码
Oct 19 Javascript
用JS实现飞机大战小游戏
Jun 09 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与MySQL交互使用详解
2006/10/09 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
jquery 日期分离成年月日的代码
2010/05/14 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
Python语言的12个基础知识点小结
2014/07/10 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
物业经理求职自我评价
2013/09/22 职场文书
财务出纳岗位职责
2014/02/03 职场文书
大学军训感言800字
2014/02/27 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
元旦晚会感言
2014/03/12 职场文书
最新离婚协议书范本
2014/08/19 职场文书
财务人员个人工作总结
2015/02/27 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers