手势密码绘制

本案例通过JQuery的jquery.gesture.password.js插件来进行绘制。绘制效果如下:
在这里插入图片描述代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <title></title>
  <script src="http://static.wanlianjin.com/data/m/wlcs/js/nocar/jquery-1.7.2.min.js" type="text/javascript" charset="utf-8"></script>
  <script src="http://static.wanlianjin.com/data/m/wlcs/js/nocar/rem.js" type="text/javascript" charset="utf-8"></script>
  <style type="text/css">
		*{
			margin: 0;
			padding: 0;
			-webkit-touch-callout:none;
			-webkit-user-select:none;
			-khtml-user-select:none;
			-moz-user-select:none;
			-ms-user-select:none;
			user-select:none;
		}
		body,html{
			font-size: 0.36rem;
			font-family: "微软雅黑";
			text-align: center;
			-webkit-tap-highlight-color: rgba(255, 255, 255, 0);
		}
		#phoneNum{
			font-size: 0.36rem;
			margin: .5rem 0 0 0;
			visibility: hidden;
		}
		#gesturepwd{width: 5.6rem;height: 5.6rem;margin: 0 auto;position: absolute;top: 3rem;left: .4rem;}
		.tishi{
			color: #f26229;
			font-size: 0.3rem;
		}
		.pan{
			width: 1.25rem;
			height: 1.25rem;
			padding: 1%;
			box-sizing: border-box;
			margin: 0 auto;
		}
		.pan div{
			width: 20%;
			height: 20%;
			float: left;
			border-radius: 1000px;
			border: 1px solid #FFA200;
			box-sizing: border-box;
			margin: 6%;
		}
		.addBg{
			background: #FFA200;
		}
		.mask{
			position: fixed;
			top: 0;
			left: 0;
			right: 0;
			bottom: 0;
			background: rgba(0,0,0,0.7);
			color: #fff;
			display: none;
		}
		#maskTime{
			margin-top: 5rem;
			display: inline-block;
		}
		.normal{color: #666;}
</style>
</head>
<body>
	
	<div id="phoneNum">180****1234</div>
	<!--小密码框-->	
	<div class="pan">
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
	</div>
	<!--提示-->
	<div id="tishi" class="tishi normal">设置手势密码</div>
	<!--密码绘制区域-->
	<div id="gesturepwd"></div>
	<!--遮罩-->
	<div class="mask">
		<span id="maskTime"></span>
	</div>
</body>

<script src="js/jquery.gesture.password.js"></script>

<script type="text/javascript">
	//设置区域的尺寸
	var w = $("#gesturepwd").width();
	var h = $("#gesturepwd").height();
	var rr = w/6*0.6;
	var pr = w/6*0.2;
	var jg = w/3*0.4;
	//密码绘制区域样式设置
  	$("#gesturepwd").GesturePasswd({
		backgroundColor:"#ffffff",  //背景色
		color:"#ffa200",   //主要的控件颜色
		roundRadii:rr,    //大圆点的半径
		pointRadii:pr, //大圆点被选中时显示的圆心的半径
		space:jg,  //大圆点之间的间隙
		width:w,   //整个组件的宽度
		height:h,  //整个组件的高度
		lineColor:"#ffa200",   //用户划出线条的颜色
		zindex :100  //整个组件的css z-index属性
	});
	var flag = 0;
	var isWd = localStorage.getItem('success') ? true : false; //记录密码是否设置成功的状态 false表示未设置成功  
	var num = 5; //密码设置成功之后,再次进来输入的限制次数
	var pwd = ""; //记录密码
	var isbol = false;
	var pwd1='',pwd2=''; //记录首次和接下来的密码
	var timer;
	if(isWd){
		 $("#tishi").text("请绘制手势密码").addClass('normal');
	}else{
		 $("#tishi").text("首次登录,请设置手势密码").addClass('normal');
	}
	if(localStorage.endTime){
		timer = setInterval(function(){ShowCountDown('maskTime');}, 1000); 
		$(".mask").show();
	}
  	$("#gesturepwd").on("hasPasswd",function(e,passwd){  //passwd记录连接的结果
	    var result;
	    pwd = passwd;
   		if(pwd.length>1){
   			//根据下面的绘制渲染密码小框
   			var arr=[];
			arr = pwd.split("");
			$(".pan div").removeClass('addBg');
			for(var i=0;i<arr.length;i++){
				$(".pan div").eq(arr[i]-1).addClass('addBg');
			}
    		if(isWd){
    			pwd1 = localStorage.getItem('pwd')
		    	if(passwd == pwd1){
				    result=true;
				}else {
				    result=false;
				}
			    if(result == true){
			        $("#gesturepwd").trigger("passwdRight");
			        setTimeout(function(){
			        	//密码验证正确后的其他操作,打开新的页面等。。。
			        	alert("密码正确!")
			      	},500);  //延迟半秒以照顾视觉效果
			    }else{
			    	num--;
			      	$("#gesturepwd").trigger("passwdWrong");
			      	//密码验证错误后的其他操作。。。
			      	$("#tishi").text("密码输入错误,您还可以输入"+num+"次").removeClass('normal');
			      	if(num==0){
			      		$("#tishi").text("绘制手势密码").addClass('normal');
			      		$(".mask").show();
			      		var endTime = (new Date()).getTime()+3600000;
			      		localStorage.endTime = endTime;
						timer = setInterval(function(){ShowCountDown('maskTime');}, 1000); 
			      	}
			    }
    		}else{
	    		if(passwd.length<4){
			    	$("#gesturepwd").trigger("passwdAgain");
				    	$("#tishi").text("请连接至少四个点").removeClass('normal');
			    }else{
			    	if(pwd1==''){
			    		//如果是第一次输入,存下结果
			    		pwd1 = pwd;
			    		$("#tishi").text("请再次输入");
			    	}else{
			    		//如果不是第一次输入,存下结果
			    		pwd2 = pwd;
			    		if(pwd1 == pwd2){ //两次密码输入一致跳转页面
			    			$("#tishi").text("设置密码成功").addClass('normal');
			    			$(".pan div").removeClass('addBg');
			    			isWd = true;
			    			localStorage.setItem('success',isWd);
			    			localStorage.setItem('pwd',pwd2);
			    			window.location.href="index.html"
			    		}else{
			    			$("#tishi").text("两次输入不一,请重新输入").removeClass('normal');
			    			pwd1='';
			    			pwd2='';
			    		}
		    		}
		    		//清除以前绘制的密码痕迹
		    		$("#gesturepwd").trigger("passwdAgain");	
		    	}
    		}
   		}else{
   			//绘制长度不足两个则自动清除
   			$("#gesturepwd").trigger("passwdWrong");
   		}
 
  	});
  	
 $('body').bind('touchstart',function(e){
 		//取消默认事件
 		e.preventDefault()
 })
 //密码设置成功之后,输入密码超过五次,则在接下来的一小时之内禁止输入,一小时之后可继续再输五次
 function ShowCountDown(divname) { 
	var now = new Date(); 
	var endDate = localStorage.endTime; 
	var leftTime=endDate-now.getTime(); 
	var leftsecond = parseInt(leftTime/1000); 
	var day1=Math.floor(leftsecond/(60*60*24)); 
	var hour=Math.floor((leftsecond-day1*24*60*60)/3600); 
	var minute=Math.floor((leftsecond-day1*24*60*60-hour*3600)/60); 
	var second=Math.floor(leftsecond-day1*24*60*60-hour*3600-minute*60); 
	var cc = document.getElementById(divname); 
	cc.innerHTML = minute+":"+second; 
	if(minute<10 && second>=10){
		cc.innerHTML = "0"+minute+":"+second; 
	}
	if(minute>=10 && second<10){
		cc.innerHTML = minute+":0"+second; 
	}
	if(minute<10 && second<10){
		cc.innerHTML = "0"+minute+":0"+second; 
	}
	console.log(leftsecond);
	if(leftsecond <= 0){
		 window.clearInterval(timer);
		 $(".mask").hide();
		 localStorage.removeItem("endTime");
		 num = 5;
	}
} 
 
</script>
</html>

代码地址:https://github.com/zhangstar1331/gesturePassword.git

猜你喜欢

转载自blog.csdn.net/weixin_40970987/article/details/83901044