美文网首页
H5实现屏幕手势解锁

H5实现屏幕手势解锁

作者: 上善若水_900e | 来源:发表于2017-09-11 23:31 被阅读0次

实现原理利用HTML5的canvas,将解锁的圈圈划出,利用touch事件解锁这些圈圈,直接看代码。

functioncreateCircle(){// 创建解锁点的坐标,根据canvas的大小来平均分配半径

varn = chooseType;// 画出n*n的矩阵

lastPoint = [];

arr = [];

restPoint = [];

r = ctx.canvas.width / (2+4* n);// 公式计算 半径和canvas的大小有关

for(vari =0; i < n ; i++) {

for(varj =0; j < n ; j++) {

arr.push({

x: j *4* r +3* r,

y: i *4* r +3* r

});

restPoint.push({

x: j *4* r +3* r,

y: i *4* r +3* r

});

}

}

//return arr;

}

canvas里的圆圈画好之后可以进行事件绑定

functionbindEvent(){

can.addEventListener("touchstart",function(e){

varpo = getPosition(e);

console.log(po);

for(vari =0; i < arr.length ; i++) {

if(Math.abs(po.x - arr[i].x) < r &&Math.abs(po.y - arr[i].y) < r) {// 用来判断起始点是否在圈圈内部

touchFlag =true;

drawPoint(arr[i].x,arr[i].y);

lastPoint.push(arr[i]);

restPoint.splice(i,1);

break;

}

}

},false);

can.addEventListener("touchmove",function(e){

if(touchFlag) {

update(getPosition(e));

}

},false);

can.addEventListener("touchend",function(e){

if(touchFlag) {

touchFlag =false;

storePass(lastPoint);

setTimeout(function(){

init();

},300);

}

},false);

}

接着到了最关键的步骤绘制解锁路径逻辑,通过touchmove事件的不断触发,调用canvas的moveTo方法和lineTo方法来画出折现,同时判断是否达到我们所画的圈圈里面,其中lastPoint保存正确的圈圈路径,restPoint保存全部圈圈去除正确路径之后剩余的。 Update方法:

functionupdate(po){// 核心变换方法在touchmove时候调用

ctx.clearRect(0,0, ctx.canvas.width, ctx.canvas.height);

for(vari =0; i < arr.length ; i++) {// 每帧先把面板画出来

drawCle(arr[i].x, arr[i].y);

}

drawPoint(lastPoint);// 每帧花轨迹

drawLine(po , lastPoint);// 每帧画圆心

for(vari =0; i < restPoint.length ; i++) {

if(Math.abs(po.x - restPoint[i].x) < r &&Math.abs(po.y - restPoint[i].y) < r) {

drawPoint(restPoint[i].x, restPoint[i].y);

lastPoint.push(restPoint[i]);

restPoint.splice(i,1);

break;

}

}

}

最后就是收尾工作,把路径里面的lastPoint保存的数组变成密码存在localstorage里面,之后就用来处理解锁验证逻辑了

functionstorePass(psw){// touchend结束之后对密码和状态的处理

if(pswObj.step ==1) {

if(checkPass(pswObj.fpassword, psw)) {

pswObj.step =2;

pswObj.spassword = psw;

document.getElementById('title').innerHTML ='密码保存成功';

drawStatusPoint('#2CFF26');

window.localStorage.setItem('passwordx',JSON.stringify(pswObj.spassword));

window.localStorage.setItem('chooseType', chooseType);

}else{

document.getElementById('title').innerHTML ='两次不一致,重新输入';

drawStatusPoint('red');

deletepswObj.step;

}

}elseif(pswObj.step ==2) {

if(checkPass(pswObj.spassword, psw)) {

document.getElementById('title').innerHTML ='解锁成功';

drawStatusPoint('#2CFF26');

}else{

drawStatusPoint('red');

document.getElementById('title').innerHTML ='解锁失败';

}

}else{

pswObj.step =1;

pswObj.fpassword = psw;

document.getElementById('title').innerHTML ='再次输入';

}

}

相关文章

  • H5实现屏幕手势解锁

    实现原理利用HTML5的canvas,将解锁的圈圈划出,利用touch事件解锁这些圈圈,直接看代码。 functi...

  • DrawRect绘图实现手势密码控件

    公司项目中除了之前的指纹解锁外,还有手势解锁,这就扯到了手势解锁的功能实现 其实核心就是利用touchBegin,...

  • iOS指纹解锁和手势解锁

    iOS指纹解锁和手势解锁 iOS指纹解锁和手势解锁

  • swift实现手势解锁

    手势解锁 基本逻辑 手势解锁在应用中都很常见,手势基本的连接点一般都是9个。实现逻辑一般都不难,主要是对滑动过程中...

  • h5使用canvas画布实现手势解锁

    前言 最近做的一个app项目使用的 apicloud 来实现跨平台开发,现在需要为这个 app 添加手势(九宫格)...

  • iOS手势解锁实现

    1、界面分析 当手指在界面移动时,移动到一个按钮范围内当中,它会把按钮给成为选中的状态,并且把第一个选中的按钮当做...

  • 微信小程序开发教程-手势解锁

    手势解锁是app上常见的解锁方式,相比输入密码方式操作起来要方便许多。下面展示如何基于微信小程序实现手机解锁。最终...

  • iOS-九宫格密码解锁

    前言:看了几篇简书,九宫格密码解锁,看着不错,拿来学习一下。 一、实现效果 二、手势解锁实现过程 分析: 如图所示...

  • iOS开发 如何实现一个手势解锁

    手势解锁在一些应用中还是会出现的,我们应该怎么从零编写一个手势解锁?下面就一步步介绍怎么实现(代码基于swfit语...

  • Android手势解锁控件实现(仿京东金融手势解锁)

    个人原创文章,请尊重原创,转载请注明出处:吴磊的简书:http://www.jianshu.com/p/a4c29...

网友评论

      本文标题:H5实现屏幕手势解锁

      本文链接:https://www.haomeiwen.com/subject/bzjqsxtx.html