js+canvas实现验证码功能


Posted in Javascript onSeptember 21, 2020

刚刚开始接触canvas,写个验证码小功能练练手,实现效果图如下:

js+canvas实现验证码功能

主要代码如下:

html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <link rel="stylesheet" href="index.css" rel="external nofollow" >
</head>
<body>
 <div class="wrapper">
 <div class="inputBox">
  <input type="text" class = 'inputCaptcha' placeholder = "请输入验证码">
  <span class="captchaIcon"></span>
 </div>
 <p class="errorText"></p>
 <div class="canvasBox">
  <div class="imageBox">
  <canvas width =300 height=80 id = 'canvasCaptcha'></canvas>
  <input type="button" class='refresh'>
  </div>
 </div>
 <button class="captchaSubmit">submit</button>
 </div>
 <script src='./jquery.js'></script>
 <script src = './index.js'></script>
</body>
</html>

css

* {
 margin: 0;
 padding: 0;
}

.wrapper {
 width: 345px;
 border: 1px solid #ccc;
 border-radius: 10px;
 padding: 20px 10px;
 margin: 30px 30px;
}

.inputBox {
 width: 345px;
 margin: 0 auto 10px;
 position: relative;
}

.inputBox .inputCaptcha {
 display: inline-block;
 height: 50px;
 width: 86%;
 text-indent: 1em;
 border: 1px solid #ddd;
 border-radius: 5px;
}

.inputBox .captchaIcon {
 display: none;
 position: absolute;
 top: 50%;
 right: 0px;
 margin-top: -16px;
 width: 32px;
 height: 32px;
 background-size: 100% 100%;
}

.errorText {
 width: 345px;
 margin: 0 auto;
 font-size: 12px;
 color: red;
 display: none;
}

.canvasBox {
 width: 345px;
 margin: 10px auto;
 position: relative;
}

#canvasCaptcha {
 border-radius: 10px;
}

.canvasBox .refresh {
 width: 34px;
 height: 34px;
 position: absolute;
 right: 0px;
 top: 50%;
 margin-top: -17px;
 border: 0;
 border-radius: 6px;
 background-image: url('./images/update.png');
 background-size: cover;
}

.captchaSubmit {
 padding: 10px 20px;
 background-color: #62b900;
 border: 0;
 font-size: 20px;
 border-radius: 5px;
 color: #fff;
}

js

var arr = [0,1,2,3,4,5,6,7,8,9];
for(var i = 65;i < 122;i++){
 if(i>90&&i<97){
 continue;
 }
 arr.push(String.fromCharCode(i));
}
//每个验证码可能出现的字母或数字(区分大小写)
var len = arr.length;
//验证码的长度
var canvasStr,value;
//验证码值
function createCanvas(){
 canvasStr = '';
 value = '';
 for(var i =0 ;i < 6;i++){
 var a = arr[Math.floor(Math.random()*len)];
 canvasStr += a+' ';
 value += a; 
 }
//canvas
 var oCanvas = document.getElementById('canvasCaptcha');
 var ctx = oCanvas.getContext('2d');
 var w = oCanvas.width;
 var h = oCanvas.height;
 var oImg = new Image();
 oImg.src = './images/bg.jpg';
 oImg.onload = function(){
 var pattern = ctx.createPattern(oImg,'repeat');
 ctx.fillStyle = pattern;
 ctx.fillRect(0,0,w,h); 
 ctx.fillStyle = '#ccc';
 ctx.textAlign = 'center';
 ctx.font = '46px Roboto Slab';
 ctx.setTransform(1,-0.12,0.2,1,0,12);
 ctx.fillText(canvasStr,w/2,60);
 }
}

createCanvas();

//验证输入的验证码与图中验证码时候相等
function captcha(e){
 if(e == value){
 return true;
 }
 else{
 return false;
 }
}

//点击提交按钮时的结果
function showResult(){
 var inputValue = $('.inputCaptcha').val();
 
 if(inputValue == '' ||inputValue == null || inputValue == 'undefined'){
 $('.errorText').css({display:'inline-block'}).html('验证码不能为空,请重新输入!');
 $('.captchaIcon').css({display:'inline-block',backgroundImage:"url('./images/false.png')"});
 }else{
 var flag = captcha(inputValue);
 if(!flag){
  $('.errorText').css({display:'inline-block'}).html('验证码错误,请重新输入!');
  $('.captchaIcon').css({display:'inline-block',backgroundImage:"url('./images/false.png')"});
 }else{
  $('.captchaIcon').css({display:'inline-block',backgroundImage:"url('./images/true.png')"});
 }
 }
}
$('.captchaSubmit').click(showResult);//提交
$('.refresh').click(createCanvas);//刷新
//点击input框
$('.inputCaptcha').focus(function(){
 $('.errorText').add($('.captchaIcon')).fadeOut(100);
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实时获取系统当前时间实例代码
Jun 28 Javascript
jQuery的position()方法详解
Jul 19 Javascript
一篇文章掌握RequireJS常用知识
Jan 26 Javascript
jQueryUI Datepicker组件设置日期高亮
Oct 13 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
jquery仿ps颜色拾取功能
Mar 08 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
详解滑动穿透(锁body)终极探索
Apr 16 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
深入浅析React中diff算法
May 19 Javascript
JS数组方法some、every和find的使用详情
Oct 05 Javascript
微信小程序网络请求封装示例
Jul 24 #Javascript
js实现敏感词过滤算法及实现逻辑
Jul 24 #Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 #jQuery
jQuery实现菜单的显示和隐藏功能示例
Jul 24 #jQuery
Vue三种常用传值示例(父传子、子传父、非父子)
Jul 24 #Javascript
微信小程序实现横向增长表格的方法
Jul 24 #Javascript
vue中使用sessionStorage记住密码功能
Jul 24 #Javascript
You might like
星际玩家的三大定律
2020/03/04 星际争霸
php的一些小问题
2010/07/03 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
Document 对象的常用方法
2009/07/31 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
Python正则表达式如何匹配中文
2020/05/27 Python
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
客户代表自我评价范例
2013/09/24 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
专题组织生活会方案
2014/06/15 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
2014年双拥工作总结
2014/11/21 职场文书
绵山导游词
2015/02/05 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
倡议书格式及范文
2015/04/29 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers