2019独角兽企业重金招聘Python工程师标准>>>

一切尽在代码中

js文件

/** * canvas绘制动画浮动验证码* code by lonelydawn 2017-04-10*/var createVeritification = function(){var GLOBAL_CHAR_NUM = 4;var GLOBAL_CHAR_STRING = "";var GLOBAL_COLOR_SET = ["#FFFFFF", "#DDDDDD", "#AAAAAA", "#888888", "#666666", "#444444", "#000000","#FFB7DD", "#FF88C2", "#FF44AA", "#FF0088", "#C10066", "#A20055", "#8C0044","#FFCCCC", "#FF8888", "#FF3333", "#FF0000", "#CC0000", "#AA0000", "#880000","#FFC8B4", "#FFA488", "#FF7744", "#FF5511", "#E63F00", "#C63300", "#A42D00","#FFDDAA", "#FFBB66", "#FFAA33", "#FF8800", "#EE7700", "#CC6600", "#BB5500","#FFEE99", "#FFDD55", "#FFCC22", "#FFBB00", "#DDAA00", "#AA7700", "#886600","#FFFFBB", "#FFFF77", "#FFFF33", "#FFFF00", "#EEEE00", "#BBBB00", "#888800","#EEFFBB", "#DDFF77", "#CCFF33", "#BBFF00", "#99DD00", "#88AA00", "#668800","#CCFF99", "#BBFF66", "#99FF33", "#77FF00", "#66DD00", "#55AA00", "#227700","#99FF99", "#66FF66", "#33FF33", "#00FF00", "#00DD00", "#00AA00", "#008800","#BBFFEE", "#77FFCC", "#33FFAA", "#00FF99", "#00DD77", "#00AA55", "#008844","#AAFFEE", "#77FFEE", "#33FFDD", "#00FFCC", "#00DDAA", "#00AA88", "#008866","#99FFFF", "#66FFFF", "#33FFFF", "#00FFFF", "#00DDDD", "#00AAAA", "#008888","#CCEEFF", "#77DDFF", "#33CCFF", "#00BBFF", "#009FCC", "#0088A8", "#007799","#CCDDFF", "#99BBFF", "#5599FF", "#0066FF", "#0044BB", "#003C9D", "#003377","#CCCCFF", "#9999FF", "#5555FF", "#0000FF", "#0000CC", "#0000AA", "#000088","#CCBBFF", "#9F88FF", "#7744FF", "#5500FF", "#4400CC", "#2200AA", "#220088","#D1BBFF", "#B088FF", "#9955FF", "#7700FF", "#5500DD", "#4400B3", "#3A0088","#E8CCFF", "#D28EFF", "#B94FFF", "#9900FF", "#7700BB", "#66009D", "#550088","#F0BBFF", "#E38EFF", "#E93EFF", "#CC00FF", "#A500CC", "#7A0099", "#660077","#FFB3FF", "#FF77FF", "#FF3EFF", "#FF00FF", "#CC00CC", "#990099", "#770077"];var chars = [];var ctx = undefined;var timer = undefined;var canvasWidth = 1000;var canvasHeight = 500;// 获取canvas 上下文环境var getContext = function(){var canvas = document.getElementById("canvas");ctx =canvas.getContext("2d");canvasWidth = canvas.width;canvasHeight = canvas.height;return ctx;};// 获取单个字符, 字符范围 0-9 A-Z a-z var getChar = function(){var char = '';// 返回 0- 61之间的整数var seed = Math.floor(Math.random()*62);if(seed < 10)           // seed 在 0- 9之间,字符为数字char = Math.floor(Math.random()*10);else if(seed < 36)    // seed 在10-35之间,字符为大写字母char = String.fromCharCode(Math.floor(Math.random()*25.99)+65);else if(seed < 62)  // seed 在36-62之间,字符为小写字母char = String.fromCharCode(Math.floor(Math.random()*25.99)+97);return char;};// 将单个字符封装为对象var getPackageChars = function(){for(var i=0; i<GLOBAL_CHAR_NUM; i++){chars[i] = {"x": canvasWidth/GLOBAL_CHAR_NUM*i,"y": canvasHeight/10*7,"size": Math.floor(((canvasWidth/GLOBAL_CHAR_NUM > canvasHeight)?canvasHeight:canvasWidth)*8/10),"char": getChar(),"color": GLOBAL_COLOR_SET[Math.floor(Math.random()*(GLOBAL_COLOR_SET.length-0.01))]};// 字符位置移动控制 barchars[i].posCtrl = (i%2 == 0)? -1: 1;}return chars;};// 检测验证码是否正确var veritificate = function(code){var txt = "";for(var i=0;i<GLOBAL_CHAR_NUM;i++)txt += chars[i].char;return txt.toUpperCase() == code.toUpperCase();};// 绘制字符var draw = function(){// 清空 画布ctx.clearRect(0,0,canvasWidth,canvasHeight);// 绘制 浅灰色背景ctx.fillStyle = "#eee";ctx.fillRect(0, 0, canvasWidth, canvasHeight );// 绘制 字符// ctx.font="72px Microsoft YaHei";ctx.font="84px Georgia";for(var i=0;i<GLOBAL_CHAR_NUM;i++){ctx.strokeStyle = chars[i].color;ctx.strokeText(chars[i].char,chars[i].x,chars[i].y);}};// 字体动画效果var animation = function(){// 初始化 timerclearInterval(timer);timer = setInterval(function(){// 动态改变字符位置for(var i=0;i<GLOBAL_CHAR_NUM;i++){chars[i].y += chars[i].posCtrl;if(chars[i].y < canvasHeight * 5/10 || chars[i].y > canvasHeight * 9/10)chars[i].posCtrl = -chars[i].posCtrl;}// 重绘字符draw();},50);};// 创建静态字体 canvasvar createStatic = function(){console.log(getContext());console.log(getPackageChars());draw();};// 创建动画字体 canvasvar createAnimation = function(){getContext();getPackageChars();animation();};return{"createStatic": createStatic,"createAnimation": createAnimation,"veritificate": veritificate}
};var test = new createVeritification();
test.createAnimation();
// test.createStatic();// 点击刷新验证码
var toggleVeritification = function(){test.createAnimation();
};// 验证输入是否正确
var checkCode = function(){// do sth...if(test.veritificate(document.getElementById("txt").value))alert(true);else alert(false);
};

html代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>验证码</title><style type="text/css">span{color:#555;}span:hover{color:#777;}</style>
</head>
<body><div><canvas id="canvas" style="width:100px;height:26px;">你的浏览器不支持canvas,请更换浏览器!</canvas><span onclick="toggleVeritification();">点击刷新</span></div><div><input id="txt" type="text"/></div><div><button onclick="checkCode();">验证</button></div><script type="text/javascript" src="index.js"></script>
</body>
</html>

本例可自动适配各种尺寸canvas

运行结果:

转载于:https://my.oschina.net/lonelydawn/blog/876507

前端验证码绘制(canvas)相关推荐

  1. CheckCode.js 前端验证码插件

    CheckCode.js 前端验证码插件 效果截图 插件使用方法 CheckCode.js 本插件的参考示例 效果截图 插件使用方法 // 在html页面引入CheckCode.js <scri ...

  2. 前端 - 前端三剑客绘制一幅《圣诞节快乐》交互祝福效果

    一.前言 2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 这个想法也是之前一直想制作一个有交互性的圣诞快乐祝福网页,一直没有时间去实现,正好趁着这次活动来满足下自己的小小的愿望哈~ 利用前端三剑 ...

  3. Javascript验证码绘制下载

    1. 网页标签为图片格式 1.1 先观察以下网页启信宝, 此网页有多种验证方式随机变化, 这里只考虑下面的情况的验证码: 1.2 这里使用js创建画布, 并根据页面验证码标签信息进行原样绘制, 具体方 ...

  4. 前端验证码与后端验证码

    最近在搭建项目的登录界面,有一个验证码模块,like this 搜了一些教程是在前端实现的,就在我准备比着写的时候,看到一条留言"这样的验证码只能防人,不能防机器". 所以,我就转 ...

  5. 发送手机短信验证码-后端、前端(验证码倒计时)

    获取手机短信验证码-后端.前端(验证码倒计时) 后端 /*** 发送手机短信验证码** @return str* @throws Exception* @author 王永圣*/@RequestMap ...

  6. 微信小程序图片前端压缩(canvas)

    将需要压缩的图片绘制在canvas,然后利用微信提供的canvasToTempFilePath()方法保存成一个图片,保存时可以根据所需指定生成图片的质量. 通过canvas配合这个接口,可以实现两种 ...

  7. 关于h5绘制canvas生成图片的注意点!

    1.第一个是关于移动端自适应的问题: 答:如果是最后只要一张canvas生成的图片,而不是要绘制的canvas的图形,则不需要考虑自适应,绘制canvas的时候的宽高,可以直接写成UI提供的图的大小, ...

  8. 【jsSDK】前端验证码SDK模块

    前端验证码模块ts 介绍 一.效果展示 二.使用步骤 1.引入库 2.参数说明 3.方法与事件说明 说明 介绍 1.该验证码模块基于原生typescript实现前端sdk模块,webpack打包. 2 ...

  9. 页面绘制 canvas 并转换成图片实现长按保存

    前言 基于 uni-app 进行m端 app 开发的时候,碰上一个需求是将卡片弹窗生成图片,之前工作有用过 html2image 等插件,虽然简单便捷,但是经常会碰见一些奇奇怪怪的兼容性问题,因此此次 ...

最新文章

  1. 分布式事物-2pc和3pc区别
  2. Docker镜像、容器数据卷和Dockerfile
  3. R语言plotly可视化:plotly可视化箱图、基于预先计算好的分位数、均值、中位数等统计指标可视化箱图、箱图中添加缺口、可视化均值和标准差(With Precomputed Quartiles)
  4. 网站页面左右_广州网站优化的技巧是什么?
  5. mysql那本书适合初学者_3本书适合初学者
  6. libcareplus支持的补丁类型
  7. PyTorch 深度学习:33分钟快速入门——VGG
  8. 输入用户名和密码登入到服务器,却显示指定的网络密码不正确,输入了好几次都是这样,这是怎么回事? 用户名和密码没问题 ,一直用的好好地今天就不行了...
  9. 阶段3 1.Mybatis_09.Mybatis的多表操作_3 完成account的一对一操作-通过写account的子类方式查询...
  10. 【网络基础知识】VLAN技术介绍(详细)
  11. 喜报!易基因“同源基因特异性甲基化时序数据分析方法”获专利授权
  12. 跨站点请求伪造攻击的原理及防御
  13. 蓝桥杯科学素养刷题和分析
  14. python办公自动化(4)拆分表格
  15. 用matlab语言实现下面的分段函数,分段函数的运算与可视化的MATLAB实现
  16. 使用matplotlib绘制折线图(绘制一天当中的气温变化)
  17. Skywalking使用与探针机制
  18. Mybatis---ResultMap及分页
  19. 图像平铺_制作无缝平铺图像的五个步骤
  20. 企业月结快递管理教程

热门文章

  1. Eclipse 中 工程 引用 其他 工程的 配置方法。
  2. 工作中postgre使用过的函数。
  3. 【Python】pymysql.err.InternalError: (1236, 'Misconfigured master - server_id was not set')
  4. 【Oracle】详解10053事件
  5. .NET----错误和异常处理机制
  6. 解决Surface Pro外接移动硬盘经常睡眠的问题
  7. MATLAB 不能保存变量问题及解决办法
  8. ubuntu系统没有声音解决方法
  9. No module named scrapy 成功安装scrapy,却无法import的解决方法
  10. 带徽标的Bootstrap 3 Navbar