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 相关文章推荐
jQuery获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
jQuery的12招常用技巧分享
Aug 08 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
Spring MVC中Ajax实现二级联动的简单实例
Jul 06 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
如何实现星星评价(jquery.raty.js插件)
Dec 21 Javascript
AngularJS中的按需加载ocLazyLoad示例
Jan 11 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 Javascript
详解如何使用nvm管理Node.js多版本
May 06 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
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
Vue异步加载about组件
2017/10/31 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
python下读取公私钥做加解密实例详解
2017/03/29 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
python制作图片缩略图
2019/04/30 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
幼儿园教研活动方案
2014/01/19 职场文书
军训自我鉴定
2014/01/22 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
2014年德育工作总结
2014/11/20 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
保送生自荐信范文
2015/03/26 职场文书
复试通知单模板
2015/04/24 职场文书