ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.moveTo(startX, startY);
ctx.lineTo(x, y);
ctx.stroke();
ctx.beginPath();
ctx.restore();
}
}
绑定事件
连线的过程就是将 3 个 touch(移动端) 事件组合起来获取当前位置的坐标放入数组中,然后将这些坐标渲染到界面上的过程。
touchstart (mousedown) 当手指(鼠标)按下时设置 isMouseDown=true,同时将该点的坐标保存到线条数组中,并将数组中的点绘制出来。
touchmove (mousemove) 当 isMouseDown=true 时 将手指(鼠标)移动过程中所有的坐标点都保存到萧条数组中,并将数组中的点绘制出来。
mouseup (mouseup) 当手指(鼠标)松开后设置 isMouseDown=fasle.将数组中的所有点绘制出来,清空 pointerArr 数组,然后比较连接的点的数量如果小于 6(自己设置,一般密码 6 位以上)给一个密码长度不够的提示,清空 puts 数组,重新调用 init 方法初始化界面,如果大于等于 6 则密码设置成功。
//兼容移动触摸的事件写法
var hastouch = "ontouchstart" in window ? true : false,
tapstart = hastouch ? "touchstart" : "mousedown",
tapmove = hastouch ? "touchmove" : "mousemove",
tapend = hastouch ? "touchend" : "mouseup";//绑定按下事件
lockCnavs.addEventListener(tapstart, function(e) {
isMouseDown = true;
var x1 = hastouch
? e.targetTouches[0].pageX
: e.clientX - canvas.offsetLeft;
var y1 = hastouch ? e.targetTouches[0].pageY : e.clientY - canvas.offsetTop;
drawLinePointer(x1, y1, true);
});
//移动时候,将经过的坐标点全部保存起来
lockCnavs.addEventListener(tapmove, function(e) {
if (isMouseDown) {
var x1 = hastouch
? e.targetTouches[0].pageX
: e.clientX - canvas.offsetLeft;
var y1 = hastouch
? e.targetTouches[0].pageY
: e.clientY - canvas.offsetTop;
drawLinePointer(x1, y1, true);
}
});
//取消
lockCnavs.addEventListener(tapend, function(e) {
drawLinePointer(0, 0, false);
isMouseDown = false;
pointerArr = [];
if (puts.length >= 6) {
alert("你的图案密码是: [ " + puts.join(" > ") + " ]");
if (unlockFlag) {
//解锁
unlock();
} else {
//设置解锁密码
settingUnlockPwd();
}
} else {
if (puts.length >= 1) {
alert("你的图案密码太简单了~~~");
init();
}
}
puts = [];
});
实现解锁逻辑
通过上面几步的操作,九宫格解锁每一次绘图之后的数据和显示效果都有了,现在只需要在关键地方添加相应逻辑代码就可以了,这里主要介绍它的实现逻辑就不对代码做封装了。









