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 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
jQuery live( type, fn ) 委派事件实现
Oct 11 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
Feb 16 Javascript
js判读浏览器是否支持html5的canvas的代码
Nov 18 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
用队列模拟jquery的动画算法实例
Jan 20 Javascript
Bootstrap零基础学习第一课之模板
Jul 18 Javascript
浅谈node中的exports与module.exports的关系
Aug 01 Javascript
ionic2中使用自动生成器的方法
Mar 04 Javascript
全面分析JavaScript 继承
May 30 Javascript
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 Javascript
JS面向对象编程——ES6 中class的继承用法详解
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
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
python中日志logging模块的性能及多进程详解
2017/07/18 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
django的ORM模型的实现原理
2019/03/04 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
四年级语文教学反思
2014/02/05 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
老兵退伍感言
2015/08/03 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫