手势解锁是app上常见的解锁方式,相比输入密码方式操作起来要方便许多。下面展示如何基于微信小程序实现手机解锁。最终实现效果如下图:
手势解锁实现代码在gesture_lock.js中(完整源码地址见末尾)。
初始化
主要设置一些参数,如canvas的长宽,canvas的context,手势锁的个数(3乘3,4乘4),手势锁的颜色,手势滑动结束时的回调函数等。并计算出手势锁的半径。
计算每个手势锁的圆心位置
绘制手势锁
接下来就是识别用户的滑动行为,判断用户划过了哪些圆圈,进而识别出用户的手势。
在touchstart和touchmove事件中检测触发并更新画布
onTouchMove(e) {
if (e.touchState === "unTouch") {
return;
}
if (e.touches.length > 1){
this.touchState = "unTouch";
return;
}
this.checkTouch(e);
let point = {x:e.touches[0].x,point);
}
检测用户是否划过某个圆圈
更新画布
当用户滑动结束时调用回调函数并传递识别出的手势
typeof this.onEnd === 'function' && this.onEnd(this.checkPoints,true);
}
重置和显示手势错误
<div class="jb51code">
<pre class="brush:js;">
gestureError() {
this.drawCanvas(this.errorColor)
}
reset() {
for (let i = 0; i < this.touchPoints.length; i++) {
this.touchPoints[i].check = 'uncheck';
}
this.checkPoints = [];
this.lastCheckPoint = null;
this.drawCanvas(this.initColor);
}