微信小程序实现之手势锁功能实例代码

设计思路流程图

这里写图片描述

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 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

相关文章

1. 获取输入框数据wxml中的input上增加bindinput属性,和方法值在js部分定义与之对应的方法,只要在输入...
1.map组件的高度如果想要铺满屏幕,要是使用height:100vh样式2.获取位置要在app.json中标明权限3.先使用...
QQ小程序支付 Java后端 同学折腾QQ小程序的支付折腾了好几天,没有完成统一下单,因为我做过微信和支付...
前言: 在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个...
一、前言: 我发现很多的同学都在抱怨说微信小程序的picker的mode = selector/mode = multiSelector 无...
前言: 之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的动态tab和swiper切换的功能,但是...