久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

HTML5實現手勢屏幕解鎖

利用HTML5的canvas,將解鎖的圈圈劃出,利用touch事件解鎖這些圈圈,直接看代碼。,HTML5中國,中國最大的HTML5中文門戶。
  效果展示


  實現原理
  利用HTML5的canvas,將解鎖的圈圈劃出,利用touch事件解鎖這些圈圈,直接看代碼。
  1. function createCircle() {// 創建解鎖點的坐標,根據canvas的大小來平均分配半徑

  2.         var n = chooseType;// 畫出n*n的矩陣
  3.         lastPoint = [];
  4.         arr = [];
  5.         restPoint = [];
  6.         r = ctx.canvas.width / (2 + 4 * n);// 公式計算 半徑和canvas的大小有關
  7.         for (var i = 0 ; i < n ; i++) {
  8.             for (var j = 0 ; j < n ; j++) {
  9.                 arr.push({
  10.                     x: j * 4 * r + 3 * r,
  11.                     y: i * 4 * r + 3 * r
  12.                 });
  13.                 restPoint.push({
  14.                     x: j * 4 * r + 3 * r,
  15.                     y: i * 4 * r + 3 * r
  16.                 });
  17.             }
  18.         }
  19.         //return arr;
  20.     }
復制代碼

  canvas里的圓圈畫好之后可以進行事件綁定
  1. function bindEvent() {
  2.         can.addEventListener("touchstart", function (e) {
  3.              var po = getPosition(e);
  4.              console.log(po);
  5.              for (var i = 0 ; i < arr.length ; i++) {
  6.                 if (Math.abs(po.x - arr[i].x) < r && Math.abs(po.y - arr[i].y) < r) { // 用來判斷起始點是否在圈圈內部

  7.                     touchFlag = true;
  8.                     drawPoint(arr[i].x,arr[i].y);
  9.                     lastPoint.push(arr[i]);
  10.                     restPoint.splice(i,1);
  11.                     break;
  12.                 }
  13.              }
  14.          }, false);
  15.          can.addEventListener("touchmove", function (e) {
  16.             if (touchFlag) {
  17.                 update(getPosition(e));
  18.             }
  19.          }, false);
  20.          can.addEventListener("touchend", function (e) {
  21.              if (touchFlag) {
  22.                  touchFlag = false;
  23.                  storePass(lastPoint);
  24.                  setTimeout(function(){

  25.                     init();
  26.                 }, 300);
  27.              }


  28.          }, false);
  29.     }
復制代碼

  接著到了最關鍵的步驟繪制解鎖路徑邏輯,通過touchmove事件的不斷觸發,調用canvas的moveTo方法和lineTo方法來畫出折現,同時判斷是否達到我們所畫的圈圈里面,其中lastPoint保存正確的圈圈路徑,restPoint保存全部圈圈去除正確路徑之后剩余的。 Update方法:
  1. function update(po) {// 核心變換方法在touchmove時候調用
  2.         ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);

  3.         for (var i = 0 ; i < arr.length ; i++) { // 每幀先把面板畫出來
  4.             drawCle(arr[i].x, arr[i].y);
  5.         }

  6.         drawPoint(lastPoint);// 每幀花軌跡
  7.         drawLine(po , lastPoint);// 每幀畫圓心

  8.         for (var i = 0 ; i < restPoint.length ; i++) {
  9.             if (Math.abs(po.x - restPoint[i].x) < r && Math.abs(po.y - restPoint[i].y) < r) {
  10.                 drawPoint(restPoint[i].x, restPoint[i].y);
  11.                 lastPoint.push(restPoint[i]);
  12.                 restPoint.splice(i, 1);
  13.                 break;
  14.             }
  15.         }

  16.     }
復制代碼

  最后就是收尾工作,把路徑里面的lastPoint保存的數組變成密碼存在localstorage里面,之后就用來處理解鎖驗證邏輯了。
  1. function storePass(psw) {// touchend結束之后對密碼和狀態的處理
  2.         if (pswObj.step == 1) {
  3.             if (checkPass(pswObj.fpassword, psw)) {
  4.                 pswObj.step = 2;
  5.                 pswObj.spassword = psw;
  6.                 document.getElementById('title').innerHTML = '密碼保存成功';
  7.                 drawStatusPoint('#2CFF26');
  8.                 window.localStorage.setItem('passwordx', JSON.stringify(pswObj.spassword));
  9.                 window.localStorage.setItem('chooseType', chooseType);
  10.             } else {
  11.                 document.getElementById('title').innerHTML = '兩次不一致,重新輸入';
  12.                 drawStatusPoint('red');
  13.                 delete pswObj.step;
  14.             }
  15.         } else if (pswObj.step == 2) {
  16.             if (checkPass(pswObj.spassword, psw)) {
  17.                 document.getElementById('title').innerHTML = '解鎖成功';
  18.                 drawStatusPoint('#2CFF26');
  19.             } else {
  20.                 drawStatusPoint('red');
  21.                 document.getElementById('title').innerHTML = '解鎖失敗';
  22.             }
  23.         } else {
  24.             pswObj.step = 1;
  25.             pswObj.fpassword = psw;
  26.             document.getElementById('title').innerHTML = '再次輸入';
  27.         }

  28.     }
復制代碼

  解鎖組件
  將這個HTML5解鎖寫成了一個組件,放在https://github.com/lvming6816077/H5lock

  轉載自AlloyTeam:http://www.alloyteam.com/2015/07 ... u-shou-shi-jie-suo/

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了html5實現移動端適配完美寫法,需要的朋友可以參考下
這篇文章主要介紹了HTML5實現桌面通知 提示功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
這篇文章主要介紹了html5實現圖片轉圈的動畫效果——讓頁面動起來的相關資料,需要的朋友可以參考下
本篇文章主要介紹了HTML5 Canvas 實現圓形進度條并顯示數字百分比效果示例,具有一定的參考價值,有興趣的可以了解一下
本文通過實例代碼給大家介紹了基于html5實現的可縮放時鐘代碼,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
這篇文章主要介紹了基于HTML5實現類似微信手機搖一搖功能(計算搖動次數),需要的朋友可以參考下
主站蜘蛛池模板: 免费国产视频在线观看 | 国产 亚洲 网红 主播 | 中文字幕 在线观看 | 成人av免费网站 | 人人干人人干人人干 | 人人99| 中文字幕第100页 | 亚洲在线成人 | 99久久精品国产一区二区三区 | 91国产在线播放 | 久久久青草婷婷精品综合日韩 | 一区二区三区免费在线观看 | 夜夜操操操 | 久久精品亚洲精品国产欧美 | 国产高清在线视频 | 91av在线免费观看 | 国产成人一区二区三区 | 免费一级黄色电影 | 亚洲精品视频久久 | 天堂国产 | 能看的av | 成人做爰69片免费观看 | 欧美日韩不卡合集视频 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 久久精品国产一区二区三区不卡 | 91视频免费观看 | 久久精品久久久久久 | 精品国产乱码一区二区三区a | 国产在线对白 | 91.com视频| 一区二区日本 | 国产精品不卡一区 | 欧美日韩电影在线 | 欧美456 | 欧洲高清转码区一二区 | 亚洲另类春色偷拍在线观看 | 黄色片免费 | 免费的av网站| 综合九九 | 九九热免费视频在线观看 | 久草欧美视频 |