设计思路流程图
1、全局常量
2、全局变量
全局变量,标记start,手势锁的每个坐标的中心点数组,记录选中数组
_this.flag = false;
_this.locationArr = [];
_this.lastPoint = [];
_this.restPoint = [];
// 设置canvas的宽高
_this.page.setData({
width : _this.width,height : _this.height
});
this.ctx = wx.createCanvasContext(this.canvasId,this);
// 初始化中心坐标数组
this.location();
// 初始化绘制图形圆
this.drawPo();
// 初始化绑定事件
this.bindEvent();
}
3、初始化坐标数组locationArr 和restPoint
4、绘制手势锁矩阵
绘制圆函数(bool值判断当前绘制的是空心还是实心)
调用fill或者stroke才会使用路径进行填充或描边。
this.ctx.beginPath();
// 画一条弧线。
this.ctx.arc(x,Math.PI * 2,true);
// 关闭一个路径
this.ctx.closePath();
// 画出当前路径的边框。默认颜色色为黑色。
bool ? this.ctx.stroke():this.ctx.fill();
// 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。
this.ctx.draw(true);
}
矩阵绘制
{
this.drawCle(current.x,current.y,this.R,true);
});
}
5、触发move时线的绘制函数
6、获取当前位置的坐标点函数
获取touch点相对于canvas的坐标
return {
x: e.touches[0].x,y: e.touches[0].y
};
}
7、触发touchstart事件处理
获取当前准确坐标
for (let [key,val] of _this.locationArr.entries()){//循环对比最近的坐标
if (Math.abs(val.x - po.x) < _this.r && Math.abs(val.y - po.y) < _this.r){
_this.flag = true;//进入判断,触发touchstart事件成功
_this.drawCle(val.x,val.y,_this.r,false);//绘制该点的实心内圆
_this.lastPoint.push(val);//记录该点坐标到lastPoint
_this.restPoint.splice(key,1);//删除记录数组restPoint的该点坐标
break;//找到坐标,跳出循环
}
}
}
8、触发touchmove事件处理
判断是否触发touchstart,如果触发,执行updata函数。
更新最后点坐标函数
9、触发touchend事件处理
通过流程图,可以更加清楚的认识到做一个功能需要创建的变量和函数,流程步骤更加清楚,当然也需要制作的过程进行优化。建议制作一些大的功能的时候,如果流程不清楚,最好绘制流程图,思路清晰,开发更快,考虑更周全。
总结
以上所述是小编给大家介绍的微信小程序实现之手势锁详解。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。