在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

微信小程序開發之手勢解鎖的介紹

微信小程序開發之手勢解鎖的介紹

更新時間:2025-09-27 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
手勢解鎖是app上常見的解鎖方式,相比輸入密碼方式操作起來要方便許多。這篇文章主要介紹了微信小程序開發教程-手勢解鎖實例,有興趣的可以了解一下。

手勢解鎖是app上常見的解鎖方式,相比輸入密碼方式操作起來要方便許多。下面展示如何基于微信小程序實現手機解鎖。最終實現效果如下圖:

微信小程序開發之手勢解鎖的介紹

整個功能基于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; //滑動手勢結束時的回調函數
  }

主要設置一些參數,如canvas的長寬,canvas的context,手勢鎖的個數(3乘3, 4乘4),手勢鎖的顏色,手勢滑動結束時的回調函數等。并計算出手勢鎖的半徑。

計算每個手勢鎖的圓心位置

  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);

接下來就是識別用戶的滑動行為,判斷用戶劃過了哪些圓圈,進而識別出用戶的手勢。

在touchstart和touchmove事件中檢測觸發并更新畫布

  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);
  }

檢測用戶是否劃過某個圓圈

  checkTouch(e) {
    for (let i = 0; i < this.touchPoints.length; i++){
      let point = this.touchPoints[i];
      if (isPointInCycle(e.touches[0].x, e.touches[0].y, point.x, point.y, this.radius)) {
        if (point.check === 'uncheck') {
          this.checkPoints.push(point);
          this.lastCheckPoint = point;
        }
        point.check = "check"
        return;
      }
    }
  }

更新畫布

   drawCanvas(color, point) {
    //每次更新之前先清空畫布
    this.ctx.clearRect(0, 0, this.width, this.height);
    //使用不同顏色和形式繪制已觸發和未觸發的鎖
    for (let i = 0; i < this.touchPoints.length; i++){
      let point = this.touchPoints[i];
      if (point.check === "check") {
        this.drawCircle(point.x, point.y, this.radius, color);
        this.drawCircleCentre(point.x, point.y, color);
      }
      else {
        this.drawCircle(this.touchPoints[i].x, this.touchPoints[i].y, this.radius, this.initColor)
      }
    }
    //繪制已識別鎖之間的線段
    if (this.checkPoints.length > 1) {
       let lastPoint = this.checkPoints[0];
       for (let i = 1; i < this.checkPoints.length; i++) {
         this.drawLine(lastPoint, this.checkPoints[i], color);
         lastPoint = this.checkPoints[i];
       }
    }
    //繪制最后一個識別鎖和當前觸摸點之間的線段
    if (this.lastCheckPoint && point) {
      this.drawLine(this.lastCheckPoint, point, color);
    }
    this.ctx.draw(true);
  }

當用戶滑動結束時調用回調函數并傳遞識別出的手勢

  onTouchEnd(e) {
    typeof this.onEnd === 'function' && this.onEnd(this.checkPoints, false);
  }

  onTouchCancel(e) {
    typeof this.onEnd === 'function' && this.onEnd(this.checkPoints, true);
  }

重置和顯示手勢錯誤

  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);
  }

如何調用

在onload方法中創建lock對象并在用戶觸摸事件中調用相應方法

 onLoad: function () {
  var s = this;
  this.lock = new Lock("id-gesture-lock", wx.createCanvasContext("id-gesture-lock"), function(checkPoints, isCancel) {
   console.log('over');
   s.lock.gestureError();
   setTimeout(function() {
    s.lock.reset();
   }, 1000);
  }, {width:300, height:300})
  this.lock.drawGestureLock();
  console.log('onLoad')
  var that = this
  //調用應用實例的方法獲取全局數據
  app.getUserInfo(function(userInfo){
   //更新數據
   that.setData({
    userInfo:userInfo
   })
   that.update()
  })
 },
 onTouchStart: function (e) {
  this.lock.onTouchStart(e);
 },
 onTouchMove: function (e) {
  this.lock.onTouchMove(e);
 },
 onTouchEnd: function (e) {
  this.lock.onTouchEnd(e);
 }

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

微信小程序之小豆瓣圖書的介紹

微信小程序列表的上拉加載和下拉刷新的實現

以上就是微信小程序開發之手勢解鎖的介紹的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 视频一区二区视频| 青青青国产在线观看| 国产男女免费视频| 色哺乳xxxxhd奶水米仓惠香| 成 人 黄 色 小说网站 s色| 男人舔女人下面高潮视频| www黄色日本| 久草资源站在线观看| 少妇高潮毛片色欲ava片| 97久久国产亚洲精品超碰热| 日韩精品一区二区三区四| 最近免费观看高清韩国日本大全| a级黄色片网站| 善良的小姨在线| 日韩精品一区二区三区电影| 女女同性女同一区二区三区按摩| xxx中文字幕| 在线观看17c| 久激情内射婷内射蜜桃| 欧美一级免费播放| 黄色国产精品视频| 看欧美ab黄色大片视频免费| 色婷婷狠狠18| 国产资源中文字幕| 日韩国产小视频| 国产天堂视频在线观看| avav在线看| 日韩av一卡二卡三卡| 男人的天堂视频在线| 各处沟厕大尺度偷拍女厕嘘嘘| 可以免费观看av毛片| 大桥未久一区二区| 国产精品自拍片| 午夜av中文字幕| 精品国产免费av| 三级av免费看| aa在线免费观看| 米仓穗香在线观看| 熟妇人妻va精品中文字幕| 免费观看中文字幕| 日韩av手机版| 霍思燕三级露全乳照| 久热在线视频观看| 日韩免费毛片视频| 男人c女人视频| mm131国产精品| 国产精品va无码一区二区| 欧美一级xxxx| 欧美日韩在线视频一区二区三区| 精品国产乱码久久久久久1区二区| a级黄色片免费| 香蕉视频色在线观看| 天堂av在线网站| 国产超级av在线| 91黄色在线看| 51xx午夜影福利| 五月六月丁香婷婷| jizzzz日本| 动漫av免费观看| 18岁网站在线观看| 国产69精品久久久久999小说| 日韩av福利在线观看| 天堂中文av在线| xxww在线观看| 中文字幕av不卡在线| 黄色一级二级三级| 激情网站五月天| 国产黄色特级片| 国产精品天天av精麻传媒| 国产av天堂无码一区二区三区| 4444在线观看| 男人的天堂视频在线| 成人午夜免费剧场| 日韩精品免费一区| 人妻无码一区二区三区四区| 成人高清dvd| 日韩黄色片在线| 女人天堂av手机在线| 久久婷婷五月综合色国产香蕉| 久久久免费视频网站| 春日野结衣av| 亚洲福利精品视频| 在线观看国产一级片| 永久av免费在线观看| 国产激情片在线观看| 777av视频| 粉嫩虎白女毛片人体| 日本在线观看免费视频| 小早川怜子一区二区三区| 五月天在线免费视频| 国产 日韩 欧美在线| 日本男人操女人| 中文字幕第三区| 国产av人人夜夜澡人人爽麻豆| 国产综合免费视频| 国产精品自在自线| 国产一二三区在线播放| 国产性生交xxxxx免费| 先锋影音男人资源| 日日橹狠狠爱欧美超碰| 97超碰人人爽| 精品欧美一区免费观看α√| 亚洲 欧美 日韩系列| 久久亚洲国产成人精品无码区| 日本福利视频在线| 五月天六月丁香| 欧美三级一级片| 在线观看中文av| heyzo国产| 成人午夜免费剧场| av在线网址导航| 18岁网站在线观看| 99国产精品白浆在线观看免费| 日韩av一二三四| 农民人伦一区二区三区| 手机在线国产视频| 国产成人久久777777| 99在线观看视频免费| 亚洲天堂一区二区在线观看| 欧美精品一区免费| 国产亚洲黄色片| 久久久久久久久久久久久国产| 992kp快乐看片永久免费网址| 日韩av新片网| 六月婷婷激情综合| 吴梦梦av在线| 九九九九九九九九| 老熟妇仑乱视频一区二区| 青青青青草视频| 99在线观看视频免费| 男人日女人的bb| 手机在线观看日韩av| 在线免费黄色网| 91热视频在线观看| 日日噜噜噜夜夜爽爽| 亚洲综合激情五月| 黄色www在线观看| 午夜av中文字幕| 尤物网站在线看| 日本精品免费视频| 秋霞在线一区二区| 亚洲天堂一区二区在线观看| 成年人三级黄色片| 免费不卡av网站| 免费看污污视频| 久久99久久99精品| 男女啪啪免费视频网站| 分分操这里只有精品| 男人亚洲天堂网| 亚洲精品一二三四五区| 国产一级片自拍| 国内av免费观看| 日韩小视频网站| 成人中文字幕av| 国产九九九视频| 男人天堂新网址| 日韩中文字幕二区| 国产女同无遮挡互慰高潮91| 国产a级片免费看| 免费看国产曰批40分钟| 日本熟妇人妻xxxxx| 日韩成人av免费| 日韩国产成人无码av毛片| 日本wwww视频| 日韩av加勒比| 欧美日韩在线不卡视频| 亚洲一二区在线观看| 久久99久久99精品| 免费看涩涩视频| 日本手机在线视频| 久久精品一卡二卡| 亚洲 高清 成人 动漫| 午夜视频在线观| 免费裸体美女网站| 久久出品必属精品| 无遮挡又爽又刺激的视频| 国产成人免费高清视频| 国产精品无码一本二本三本色| 可以免费看的黄色网址| 男人舔女人下面高潮视频| 国产一区二区片| 国产永久免费网站| 麻豆av免费在线| 人妻夜夜添夜夜无码av| 永久免费黄色片| jizz欧美激情18| 极品美女扒开粉嫩小泬| 国产精品无码乱伦| av污在线观看| 亚洲精品乱码久久久久久自慰| 欧美无砖专区免费| 国产日韩欧美大片| 国产欧美精品一二三| 国产免费视频传媒| 日日碰狠狠躁久久躁婷婷| 青青草国产精品视频| 男人的天堂avav| 99在线观看视频免费| 成人小视频在线观看免费| 992tv成人免费观看|