每天学一个jquery插件-做点击验证

每天一个jquery插件-做点击验证

做点击验证

页面操作的验证有很多种方式,今天尝试的就是那个随机给你排几个字放在图片上,然后你按顺序去点击,返回点击效果

效果如下
在这里插入图片描述

代码部分

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>做点击验证</title>
		<script src="js/jquery-3.4.1.min.js"></script>
		<style>
			* {
     
     
				margin: 0px;
				padding: 0px;
				user-select: none;
			}

			#div {
     
     
				width: 400px;
				height: 300px;
				border: 1px solid lightgray;
				margin: 50px;
				position: relative;
			}

			.item {
     
     
				position: absolute;
				border: 1px solid lightgray;
				width: 20px;
				height: 20px;
				display: flex;
				justify-content: center;
				align-items: center;
				font-size: 12px;
				/* 让这个dom无法被点击 */
				pointer-events: none;
			}
			.item.dj{
     
     
				border-radius: 50%;
				background-color: red;
				color: white;
			}
		</style>
	</head>
	<body>
		<div id="div"></div>
	</body>
</html>
<script>
	var arr = ["一", "二", "三", "四"];
	drawstr(arr)

	function drawstr(ars) {
     
     
		for(var i = 0;i<arr.length;i++){
     
     
			drawspan(ars[i],i+1)
		}
	}
	//以四个点击事件为一个周期,其中假如验证有效性的验证
	var counts = 0;
	$("#div").click(function(e){
     
     
		counts++;
		var x = e.offsetX;
		var y = e.offsetY;
		var $dj = $("<div class='item dj' data-index='"+counts+"'>"+counts+"</div>");
		$dj.appendTo($("#div"));
		$dj.css({
     
     
			"top":y-10+"px",
			"left":x-10+"px"
		})
		if(counts==4){
     
     
			setTimeout(function(){
     
     
				check();
			},200)
		}
	})
	function check(){
     
     
		if(checks()){
     
     
			alert("正确")
		}else{
     
     
			alert("错误")
		}
		$(".item.dj").remove();
		counts = 0;
	}
	function checks(){
     
     
		//挨个检查坐标的相距位置,因为宽高一致,所以只要二者的坐标两点差值在宽高范围内20内,就是点到位置上了
		var arr=  [];//这个数组存一下记录	
		for(var i  =1;i<=4;i++){
     
     
			var flag = true;
			var $txt = $(".item.txt[data-index='"+i+"']");
			var $dj = $(".item.dj[data-index='"+i+"']");
			var x1 = getnum($txt,"left");
			var y1 = getnum($txt,"top");
			var x2 = getnum($dj,"left");
			var y2 = getnum($dj,"top");
			flag = Math.abs(x1-x2)<20?true:false;
			flag = Math.abs(y1-y2)<20?true:false;
			arr.push(flag);
		}
		console.log(arr)
		return arr[0]&&arr[1]&&arr[2]&&arr[3];
	}
	function getnum($dom,str){
     
     
		return parseInt($dom.css(str).replace("px",""));
	}
	function drawspan(str,temp) {
     
     
		//随机产生定位
		var top = Math.floor(Math.random() * 300);
		var left = Math.floor(Math.random() * 400);
		var deg = Math.floor(Math.random() * 361);
		top = top < 20 ? 20 : top > 280 ? 280 : top;
		left = left < 20 ? 20 : left > 380 ? 380 : left;
		var $item = $("<div class='item txt' data-index='"+temp+"'>" + str + "</div>");
		$item.appendTo($("#div"));
		$item.css({
     
     
			'left': left + 'px',
			'top': top + 'px',
			'transform':'rotate('+deg+'deg)'
		})
	}
</script>

思路解释

  • 随机渲染就是随机产生管理位置的两坐标参数就行了,要点效果就额外加个旋转的让图标转一点点角度
  • 然后点击同理,反正满四次点击就验证一波,然后清空再来
  • 验证的时候不难,因为我这里还算是比较简单的,反正这些东西都有一个坐标,暂且就是left和top就行了,此外鼠标的点击也可以获得在这个容器中的相对位置offset,这样子两组坐标就有了
  • 关于验证顺序那就在渲染的时候标记上是第几个标记就行,然后挨个一对对的拿来判断,反正高宽一直,我直接算坐标的差距就行了
  • 完事,休息

猜你喜欢

转载自blog.csdn.net/weixin_44142582/article/details/115016144