简约大气的JavaScript验证码demo,详细案例带注释,可直接用

先看效果图

在这里插入图片描述在这里插入图片描述

html部分

	<body>
		<div >
			<input type="text" value="" placeholder="请输入验证码" id="text" class="input-val"/>
			<canvas id="canvas" width="106" height="43"></canvas>
		</div>
	</body>

css部分

		<style type="text/css">
			body{
				margin-top: 12.5rem;
				margin-left: 200px;
				text-align: center;
			}
			div{
				width: 300px;
				height: 200px;
			}
			input{
				width: 110px;
				height: 40px;
				border-color: skyblue;
				border-width: 1.5px;
				border-radius: 30px;
				border-style: solid;
				float: left;
				padding-left: 20px;
			}
			canvas{
				border: 1px solid #000000;
			}
		</style>

重点:js部分

先引用jquery
<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
然后
<script type="text/javascript">
		//鼠标事件,我这里是鼠标移开进行验证判断
		$(function() {
			var show_num = [];
			draw(show_num);
	
			$("#canvas").on('click', function() {
				draw(show_num);
			})
			$("#text").mouseout(function(){
				var val = $(".input-val").val().toLowerCase();
				var num = show_num.join("");
				if (val == num) {
					$('.btn').attr("disabled", false);
				} else {
					alert('验证码错误!请重新输入!');
					$(".input-val").val('');
					draw(show_num);
				}
			})
		})
	
		function draw(show_num) {
			var canvas_width = $('#canvas').width();
			var canvas_height = $('#canvas').height();
			var canvas = document.getElementById("canvas"); //获取到canvas的对象,演员
			var context = canvas.getContext("2d"); //获取到canvas画图的环境,演员表演的舞台
			canvas.width = canvas_width;
			canvas.height = canvas_height;
			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";
			var aCode = sCode.split(",");
			var aLength = aCode.length; //获取到数组的长度
	
			for (var i = 0; i <= 3; i++) {
				var j = Math.floor(Math.random() * aLength); //获取到随机的索引值
				var deg = Math.random() * 30 * Math.PI / 180; //产生0~30
				var txt = aCode[j]; //得到随机的一个内容
				show_num[i] = txt.toLowerCase();
				var x = 10 + i * 20; //文字在canvas上的x坐标
				var y = 20 + Math.random() * 8; //文字在canvas上的y坐标
				context.font = "bold 23px 微软雅黑";
	
				context.translate(x, y);
				context.rotate(deg);
	
				context.fillStyle = randomColor();
				context.fillText(txt, 0, 0);
	
				context.rotate(-deg);
				context.translate(-x, -y);
			}
			for (var i = 0; i <= 5; i++) { //验证码上显示线条
				context.strokeStyle = randomColor();
				context.beginPath();
				context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
				context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
				context.stroke();
			}
			for (var i = 0; i <= 30; i++) { //验证码上显示小点
				context.strokeStyle = randomColor();
				context.beginPath();
				var x = Math.random() * canvas_width;
				var y = Math.random() * canvas_height;
				context.moveTo(x, y);
				context.lineTo(x + 1, y + 1);
				context.stroke();
			}
		}
	
		function randomColor() { //得到随机的颜色值
			var r = Math.floor(Math.random() * 256);
			var g = Math.floor(Math.random() * 256);
			var b = Math.floor(Math.random() * 256);
			return "rgb(" + r + "," + g + "," + b + ")";
		}
	</script>

下面附上demo源码:
https://download.csdn.net/download/xiao_xiao_b/11247722

猜你喜欢

转载自blog.csdn.net/xiao_xiao_b/article/details/92802299