canvas验证码实现

  
1
<!DOCTYPE html> 2 <html> 3 <!-- head --> 4 <head> 5 <meta charset="utf-8"> 6 <title>图片登录验证</title> 7 <meta name="renderer" content="webkit"> 8 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 9 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 10 11 <style> 12 body{margin: 10px;} 13 .demo-carousel{height: 200px; line-height: 200px; text-align: center;} 14 .code { 15 width: 400px; 16 margin: 0 auto; 17 } 18 .input-val { 19 width: 295px; 20 background: #ffffff; 21 height: 2.8rem; 22 padding: 0 2%; 23 border-radius: 5px; 24 border: none; 25 border: 1px solid rgba(0,0,0,.2); 26 font-size: 1.0625rem; 27 } 28 #canvas { 29 float: right; 30 display: inline-block; 31 border: 1px solid #ccc; 32 border-radius: 5px; 33 cursor: pointer; 34 } 35 .btn { 36 width: 100px; 37 height: 40px; 38 background: #f1f1f1; 39 border: 1px solid #ccc; 40 border-radius: 5px; 41 margin: 20px auto 0; 42 display: block; 43 font-size: 1.2rem; 44 color: #e22e1c; 45 cursor: pointer; 46 } 47 * { 48 margin: 0; 49 padding: 0; 50 box-sizing: border-box; 51 } 52 </style> 53 </head> 54 55 <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> 56 57 <body cz-shortcut-listen="true" class="layui-layout-body"> 58 <div class="layui-layer-move"> 59 60 <div class="code"> 61 <input type="text" value="" placeholder="请输入验证码(不区分大小写)" class="input-val"> 62 <canvas id="canvas" width="100" height="43"></canvas> 63 <button class="btn">提交</button> 64 </div> 65 66 </div> 67 </body> 68 <script> 69 70 $(function(){ 71 var show_num = []; 72 draw(show_num); 73 74 $("#canvas").on('click',function(){ 75 draw(show_num); 76 }) 77 $(".btn").on('click',function(){ 78 var val = $(".input-val").val().toLowerCase(); 79 var num = show_num.join(""); 80 if(val==''){ 81 alert('请输入验证码!'); 82 }else if(val == num){ 83 alert('提交成功!'); 84 $(".input-val").val(''); 85 draw(show_num); 86 87 }else{ 88 alert('验证码错误!请重新输入!'); 89 $(".input-val").val(''); 90 draw(show_num); 91 } 92 }) 93 }) 94 95 function draw(show_num) { 96 var canvas_width=$('#canvas').width(); 97 var canvas_height=$('#canvas').height(); 98 var canvas = document.getElementById("canvas");//获取到canvas的对象,演员 99 var context = canvas.getContext("2d");//获取到canvas画图的环境,演员表演的舞台 100 canvas.width = canvas_width; 101 canvas.height = canvas_height; 102 var sCode = "A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0"; 103 var aCode = sCode.split(","); 104 var aLength = aCode.length;//获取到数组的长度 105 106 for (var i = 0; i <= 3; i++) { 107 var j = Math.floor(Math.random() * aLength);//获取到随机的索引值 108 var deg = Math.random() * 30 * Math.PI / 180;//产生0~30之间的随机弧度 109 var txt = aCode[j];//得到随机的一个内容 110 show_num[i] = txt.toLowerCase(); 111 var x = 10 + i * 20;//文字在canvas上的x坐标 112 var y = 20 + Math.random() * 8;//文字在canvas上的y坐标 113 context.font = "bold 23px 微软雅黑"; 114 115 context.translate(x, y); 116 context.rotate(deg); 117 118 context.fillStyle = randomColor(); 119 context.fillText(txt, 0, 0); 120 121 context.rotate(-deg); 122 context.translate(-x, -y); 123 } 124 for (var i = 0; i <= 5; i++) { //验证码上显示线条 125 context.strokeStyle = randomColor(); 126 context.beginPath(); 127 context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height); 128 context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height); 129 context.stroke(); 130 } 131 for (var i = 0; i <= 30; i++) { //验证码上显示小点 132 context.strokeStyle = randomColor(); 133 context.beginPath(); 134 var x = Math.random() * canvas_width; 135 var y = Math.random() * canvas_height; 136 context.moveTo(x, y); 137 context.lineTo(x + 1, y + 1); 138 context.stroke(); 139 } 140 } 141 142 function randomColor() {//得到随机的颜色值 143 var r = Math.floor(Math.random() * 256); 144 var g = Math.floor(Math.random() * 256); 145 var b = Math.floor(Math.random() * 256); 146 return "rgb(" + r + "," + g + "," + b + ")"; 147 } 148 </script> 149 </html>

嵌套与layui框架中,效果如图:

转载于:https://www.cnblogs.com/qffxj/p/11277670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值