久久久久久久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 | 国产一区二区三区四区hd | 国产成人小视频 | 欧美精品一 | 91中文视频 | 欧美成人第一页 | 欧美激情欧美激情在线五月 | 国产精品a久久久久 | 日韩欧美国产精品 | 亚洲精品免费在线 | 欧美一级免费 | 国产精品中文字幕在线播放 | 欧洲精品视频一区 | 亚洲码欧美码一区二区三区 | 91在线看 | 韩日在线 | www.一区二区三区 | 精品福利av导航 | 国产精品久久午夜夜伦鲁鲁 | 欧美国产日韩精品 | 色婷婷av一区二区三区软件 | 国产在线看片 | 欧美一区二区在线免费观看 | 韩日一区二区 | 日日草夜夜草 | 少妇无套高潮一二三区 | 99re在线 | 久国产视频 | 日本免费黄色一级片 | 91久久精品一区 | 亚洲精品日韩综合观看成人91 | 日本成人在线观看网站 | 亚洲精品www久久久 www.蜜桃av | 亚洲国产免费 | 久久精品一级 | 日韩www | 麻豆久久久久久 | 欧美激情一区二区三区 | 欧洲精品视频一区 | 成人在线一区二区 |