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 相关文章推荐
不错的asp中显示新闻的功能
Oct 13 Javascript
javascript中的继承实例代码
Apr 27 Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
JavaScript实现页面5秒后自动跳转的方法
Apr 16 Javascript
基于JavaScript实现仿京东图片轮播效果
Nov 06 Javascript
实例详解ECMAScript5中新增的Array方法
Apr 05 Javascript
Vue.js每天必学之指令系统与自定义指令
Sep 07 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 Javascript
layui点击数据表格添加或删除一行的例子
Sep 12 Javascript
创建nuxt.js项目流程图解
Mar 13 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作的文本留言本的例子(四)
2006/10/09 PHP
PHP开发负载均衡指南
2010/07/17 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
yii操作session实例简介
2014/07/31 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
详解php实现页面静态化原理
2017/06/21 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
python中单下划线_的常见用法总结
2018/07/10 Python
Python多线程原理与用法详解
2018/08/20 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
药学职务聘任书
2014/03/29 职场文书
工作说明书格式
2014/07/29 职场文书
学党史心得体会
2014/09/05 职场文书
社区元宵节活动总结
2015/02/06 职场文书
世界红十字日活动总结
2015/02/10 职场文书
宾馆客房管理制度
2015/08/06 职场文书
听课评课活动心得体会
2016/01/15 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
Python音乐爬虫完美绕过反爬
2021/08/30 Python
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
Java数组详细介绍及相关工具类
2022/04/14 Java/Android