亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序實現之手勢鎖功能實例代碼

2020-03-21 16:13:31
字體:
來源:轉載
供稿:網友

設計思路流程圖

微信小程序,手勢鎖,微信小程序開發

1、全局常量

constructor(page,opts){  // 初始化全局常量數據  this.page = page;  this.width = opts.width || 300;  this.height = opts.height || 300;  this.canvasId = opts.canvasId || 'lock';  this.type = opts.type || 3;  this.cleColor = opts.cleColor || 'rgba(0,136,204,1)';  this.size = this.width / this.type / 2;//坐標點之間的半間距  this.R = this.size / 2;//外圓半徑  this.r = this.size / 4;//內圓半徑  // 判斷是否在緩存中存在密碼,如果存在,直接進行第二步驟:解碼,如果不存在,進行初始化,設置密碼  this.pswObj = wx.getStorageSync('password') ? {   step: 2,   password: JSON.parse(wx.getStorageSync('password'))  } : { step: 0 };  // 啟動手勢鎖初始化  this.init(); }

2、全局變量

init(){  const _this = this;  // 定義全局變量,標記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

location(){  // 計算坐標的x,y坐標,同時記錄當前位置代表的數  let count = 0,arr = [],arr0 = [];  for(let i = 0; i < this.type; i++){   for(let j = 0 ; j < this.type; j++){    count++;    arr.push({     x: this.size * ((j + 1) * 2 - 1),//奇數個坐標間半間距     y: this.size * ((i + 1) * 2 - 1),//奇數個坐標間半間距     count: count//每個坐標代表的數    });    arr0.push({     x: this.size * ((j + 1) * 2 - 1),//奇數個坐標間半間距     y: this.size * ((i + 1) * 2 - 1),//奇數個坐標間半間距     count: count//每個坐標代表的數    });   }  }  this.locationArr = arr;  this.restPoint = arr0; }

4、繪制手勢鎖矩陣

繪制圓函數(bool值判斷當前繪制的是空心還是實心)

drawCle(x, y, r, bool){  // 設置邊框顏色。  bool ? this.ctx.setStrokeStyle(this.cleColor) : this.ctx.setFillStyle(this.cleColor);; // 注意用set  // 設置線條的寬度。  this.ctx.setLineWidth(2); // 注意用set  // 開始創建一個路徑,需要調用fill或者stroke才會使用路徑進行填充或描邊。  this.ctx.beginPath();  // 畫一條弧線。  this.ctx.arc(x, y, r, 0, Math.PI * 2, true);  // 關閉一個路徑  this.ctx.closePath();  // 畫出當前路徑的邊框。默認顏色色為黑色。  bool ? this.ctx.stroke():this.ctx.fill();  // 將之前在繪圖上下文中的描述(路徑、變形、樣式)畫到 canvas 中。  this.ctx.draw(true); }

矩陣繪制

drawPo(){  // 繪制空心圓,繪制之前,清空canvas,防止重復繪制  this.ctx.clearRect(0, 0, this.width, this.height);  this.locationArr.forEach(current => {   this.drawCle(current.x, current.y, this.R, true);  }); }

5、觸發move時線的繪制函數

drawLine(po) {// 解鎖軌跡  this.ctx.beginPath();  // 線寬  this.ctx.lineWidth = 3;  // 起始點  this.ctx.moveTo(this.lastPoint[0].x, this.lastPoint[0].y);  // 中間轉換的點  for (var i = 1; i < this.lastPoint.length; i++) {   this.ctx.lineTo(this.lastPoint[i].x, this.lastPoint[i].y);  }  // 正在移動選擇的點  if (po) { this.ctx.lineTo(po.x, po.y);}  this.ctx.stroke();  this.ctx.closePath();  this.ctx.draw(true); }

6、獲取當前位置的坐標點函數

getPosition(e) { // 獲取touch點相對于canvas的坐標 return {  x: e.touches[0].x,  y: e.touches[0].y };}

7、觸發touchstart事件處理

_this.page.onTouchStart = function(e){ let po = _this.getPosition(e);//獲取當前準確坐標 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事件處理

_this.page.onTouchMove = function (e) { _this.flag && _this.updata(_this.getPosition(e));}

判斷是否觸發touchstart,如果觸發,執行updata函數。

更新最后點坐標函數

updata(po){  //清空canvas  this.ctx.clearRect(0, 0, this.width, this.height);  //重新繪制矩陣  for (let val of this.locationArr) {   this.drawCle(val.x, val.y, this.R, true);  }  //繪制已記錄坐標的實心圓  for (let val of this.lastPoint) {   this.drawCle(val.x, val.y, this.r ,false);  }  //繪制解鎖路線  this.drawLine(po);  //找到移動中的還未落點的精確坐標  for (let [key, val] of this.restPoint.entries()) {   if (Math.abs(po.x - val.x) < this.r && Math.abs(po.y - val.y) < this.r) {    this.drawCle(val.x, val.y, this.r, false);    this.lastPoint.push(val);    this.restPoint.splice(key, 1);    break;   }  } }

9、觸發touchend事件處理

_this.page.onTouchEnd = function (e) { if(_this.flag){  _this.flag = false;  _this.endData();  _this.checkPassword(_this.lastPoint);  setTimeout(function () {   _this.reset();  }, 500); }}

通過流程圖,可以更加清楚的認識到做一個功能需要創建的變量和函數,流程步驟更加清楚,當然也需要制作的過程進行優化。建議制作一些大的功能的時候,如果流程不清楚,最好繪制流程圖,思路清晰,開發更快,考慮更周全。

總結

以上所述是小編給大家介紹的微信小程序實現之手勢鎖詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲毛茸茸少妇高潮呻吟| 欧美激情网站在线观看| 亚洲成人在线视频播放| 这里只有精品在线播放| 97国产真实伦对白精彩视频8| 亚洲欧美在线磁力| 亚洲一区二区精品| 久久在线精品视频| 国产成人鲁鲁免费视频a| 午夜精品蜜臀一区二区三区免费| 亚洲爱爱爱爱爱| 日韩美女毛茸茸| 91日本视频在线| 精品成人国产在线观看男人呻吟| 免费97视频在线精品国自产拍| 按摩亚洲人久久| 欧美日韩国产色视频| 最新日韩中文字幕| 奇米成人av国产一区二区三区| 欧美xxxx18性欧美| 亚洲视频一区二区三区| 亚洲精品电影久久久| 久久天天躁日日躁| 久久久影视精品| 亚洲免费人成在线视频观看| 日韩视频在线观看免费| 亚洲国内精品视频| 亚洲国产毛片完整版| 国产精品久久久久久久天堂| 日韩av片永久免费网站| 亚洲人成电影网站色www| 久久综合免费视频影院| 国产精品99一区| 一本一本久久a久久精品牛牛影视| 日韩在线小视频| 日韩精品在线第一页| 国产精品久久久久久久电影| 伊人亚洲福利一区二区三区| 国产成人小视频在线观看| 久热99视频在线观看| 日韩女在线观看| 日韩久久免费电影| 中文字幕国产亚洲| 国产精品日韩电影| 久久精品成人欧美大片古装| 亚洲人成77777在线观看网| 91日本在线视频| 欧美成人激情视频| 91黑丝在线观看| 韩国精品美女www爽爽爽视频| 国产精品国模在线| 国产91av在线| www.国产一区| 欧美激情一区二区三区在线视频观看| 在线日韩第一页| 欧美成人午夜激情在线| 亚洲精品自产拍| 亚洲国产成人av在线| 欧美成人剧情片在线观看| 日韩成人在线播放| 国产成人精品综合久久久| 欧美成人精品一区二区| 国产美女精品视频| 992tv在线成人免费观看| 国产一区二区三区在线观看网站| 国产在线拍偷自揄拍精品| 国产精彩精品视频| 国产精品第3页| 亲爱的老师9免费观看全集电视剧| 色爱av美腿丝袜综合粉嫩av| 日韩中文在线不卡| 久久精品国产久精国产思思| 久久99久久久久久久噜噜| 午夜精品久久久久久久久久久久久| 午夜精品久久17c| 在线播放国产一区中文字幕剧情欧美| 色妞一区二区三区| 亚洲肉体裸体xxxx137| 成人中文字幕+乱码+中文字幕| 欧美精品制服第一页| 成人免费网站在线看| 亚洲午夜久久久影院| 国产成人在线播放| 98精品国产自产在线观看| 爱福利视频一区| 欧日韩在线观看| 亚洲国产日韩欧美综合久久| 日韩中文综合网| 伊人伊成久久人综合网站| 国产精品成人免费电影| 欧美另类交人妖| 91影视免费在线观看| 成人免费看吃奶视频网站| 91高清视频免费观看| 精品夜色国产国偷在线| 久久综合久中文字幕青草| 视频一区视频二区国产精品| 51久久精品夜色国产麻豆| 久久欧美在线电影| 欧美精品成人在线| 国产精品黄色影片导航在线观看| 亚洲免费一在线| 激情av一区二区| 最近2019免费中文字幕视频三| 欧美在线视频观看免费网站| 中文字幕亚洲二区| 不卡av在线播放| 91亚洲精品久久久久久久久久久久| 欧美精品在线看| 国产在线视频一区| 国产亚洲精品久久久优势| 久久这里只有精品视频首页| 日韩视频永久免费观看| 日韩电影大片中文字幕| 亚洲激情视频在线播放| 九九精品视频在线观看| 国内精品久久久久久久久| 亚洲free性xxxx护士hd| 亚洲欧美在线磁力| 欧美日韩一区二区在线播放| 欧美高清自拍一区| 欧美一乱一性一交一视频| 一本一本久久a久久精品牛牛影视| 日韩av电影手机在线观看| 亚洲性生活视频在线观看| 国产精品aaaa| 日韩欧美极品在线观看| 色爱精品视频一区| 国产欧美日韩综合精品| 精品久久久久久久久中文字幕| 国产精品美女午夜av| 国产欧美日韩中文字幕| 国产亚洲精品成人av久久ww| 日韩美女视频免费看| 大桥未久av一区二区三区| 国产日韩中文字幕| 国产精品美女999| 久久久亚洲国产| 91tv亚洲精品香蕉国产一区7ujn| 久久躁日日躁aaaaxxxx| 成人久久久久久久| 亚洲精品不卡在线| 黄网动漫久久久| 欧美亚洲视频在线看网址| 亚洲第一福利网| 国产成人av网| 亚洲欧美另类自拍| 成人在线一区二区| 国产精品96久久久久久| 亚洲人a成www在线影院| 国产精品成人av在线| 欧美一区在线直播| 欧洲永久精品大片ww免费漫画| 亚洲成人激情图| 亚洲欧美激情一区| 欧美日韩午夜视频在线观看| 亚洲精品国产综合区久久久久久久| 琪琪亚洲精品午夜在线| 国产suv精品一区二区| 92福利视频午夜1000合集在线观看| 日韩精品高清在线观看| 久久久精品国产亚洲| 久热爱精品视频线路一| 国产成人精品视频在线观看|