ジェスチャーロック解除はアプリ上で一般的なロック解除方法であり、パスワードを入力するよりも操作がはるかに便利です。以下に、WeChat アプレットに基づいて電話のロックを解除する方法を示します。最終的な実装効果は次のとおりです。
関数全体は canvas に基づいて実装され、まず Canvas コンポーネントを追加し、スタイルを設定します
<!--index.wxml--> <view class="container"> <canvas canvas-id="id-gesture-lock" class="gesture-lock" bindtouchstart="onTouchStart" bindtouchmove="onTouchMove" bindtouchend="onTouchEnd"></canvas> </view>
.gesture-lock { margin: 100rpx auto; width: 300px; height: 300px; background-color: #ffffff; }
コードは、gesture_lock.js にあります (完全なソース コードのアドレスについては、最後を参照してください)。
初期化
constructor(canvasid, context, cb, opt){ this.touchPoints = []; this.checkPoints = []; this.canvasid = canvasid; this.ctx = context; this.width = opt && opt.width || 300; //画布长度 this.height = opt && opt.height || 300; //画布宽度 this.cycleNum = opt && opt.cycleNum || 3; this.radius = 0; //触摸点半径 this.isParamOk = false; this.marge = this.margeCircle = 25; //触摸点及触摸点和画布边界间隔 this.initColor = opt && opt.initColor || '#C5C5C3'; this.checkColor = opt && opt.checkColor || '#5AA9EC'; this.errorColor = opt && opt.errorColor || '#e19984'; this.touchState = "unTouch"; this.checkParam(); this.lastCheckPoint = null; if (this.isParamOk) { // 计算触摸点的半径长度 this.radius = (this.width - this.marge * 2 - (this.margeCircle * (this.cycleNum - 1))) / (this.cycleNum * 2) this.radius = Math.floor(this.radius); // 计算每个触摸点的圆心位置 this.calCircleParams(); } this.onEnd = cb; //滑动手势结束时的回调函数 }
主に、キャンバスの長さと幅、キャンバスのコンテキスト、ジェスチャーロックの数(3×3、4×4)、色などのいくつかのパラメータを設定します。ジェスチャーロックの終了、ジェスチャースライド時間コールバック関数の終了など。そして、ジェスチャーロックの半径を計算します。各ジェスチャーロックの中心位置を計算するジェスチャーロックロック
rreee
の次のステップは、ユーザーのスライディングを識別し、ユーザーがどのサークルをサークルするかを判断することです。次に、ユーザーのジェスチャーを認識します。touchstart と touchmoveevents と
updatecanvas
calCircleParams() { let n = this.cycleNum; let count = 0; for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++){ count++; let touchPoint = { x: this.marge + i * (this.radius * 2 + this.margeCircle) + this.radius, y: this.marge + j * (this.radius * 2 + this.margeCircle) + this.radius, index: count, check: "uncheck", } this.touchPoints.push(touchPoint) } } }
ユーザーが円を越えたかどうかを検出
for (let i = 0; i < this.touchPoints.length; i++){
this.drawCircle(this.touchPoints[i].x, this.touchPoints[i].y, this.radius, this.initColor)
}
this.ctx.draw(true);
キャンバスを更新する
方法call
onload
メソッドでlockオブジェクト
を作成し、ユーザータッチイベントで対応するメソッドを呼び出しますonTouchStart(e) { // 不识别多点触控 if (e.touches.length > 1){ this.touchState = "unTouch"; return; } this.touchState = "startTouch"; this.checkTouch(e); let point = {x:e.touches[0].x, y:e.touches[0].y}; this.drawCanvas(this.checkColor, point); } 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, y:e.touches[0].y}; this.drawCanvas(this.checkColor, point); }
以上がWeChat アプレット開発ジェスチャのロック解除サンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。