HTML5 Canvas简简单单实现手机九宫格手势密码解锁

简介: 原文:HTML5 Canvas简简单单实现手机九宫格手势密码解锁   早上花了一个半小时写了一个基于HTML Canvas的手势解锁,主要是为了好玩,可能以后会用到。 思路:根据配置计算出九个点的位置,存入一个数组,当然存入数组的顺序的索引是:    第一行:0   1  2    第二行...
原文: HTML5 Canvas简简单单实现手机九宫格手势密码解锁

 

早上花了一个半小时写了一个基于HTML Canvas的手势解锁,主要是为了好玩,可能以后会用到。

思路:根据配置计算出九个点的位置,存入一个数组,当然存入数组的顺序的索引是:

   第一行:0   1  2    第二行:3  4  5   第三行:6  7  8

        然后就根据这个坐标数组去绘制九个点

        再则我们需要一个保存选中点的数组,每当touchmove事件就判断当前触摸点和那个点的距离小于圆的半径

    如果为真的话 那么就添加进入选中点的数组

    在绘制过程中就根据该数据去绘制线条。就这么简单 

上代码:(需要chrome浏览器或者火狐浏览器 模拟手机状态才有触摸效果)

 

  1 <!DOCTYPE html>
  2 <html>
  3 <head lang="en">
  4     <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
  5           name="viewport"/>
  6     <meta charset="UTF-8">
  7     <title></title>
  8     <style type="text/css">
  9         html, body {
 10             margin: 0;
 11             padding: 0;
 12             width: 100%;
 13             height: 100%;
 14         }
 15     </style>
 16     <script type="text/javascript">
 17         var R = 26, CW = 400, CH = 320, OffsetX = 30, OffsetY = 30;
 18         function CaculateNinePointLotion(diffX, diffY) {
 19             var Re = [];
 20             for (var row = 0; row < 3; row++) {
 21                 for (var col = 0; col < 3; col++) {
 22                     var Point = {
 23                         X: (OffsetX + col * diffX + ( col * 2 + 1) * R),
 24                         Y: (OffsetY + row * diffY + (row * 2 + 1) * R)
 25                     };
 26                     Re.push(Point);
 27                 }
 28             }
 29             return Re;
 30         }
 31         var PointLocationArr = [];
 32         window.onload = function () {
 33             var c = document.getElementById("myCanvas");
 34             CW = document.body.offsetWidth;
 35             c.width = CW;
 36             c.height = CH;
 37             var cxt = c.getContext("2d");
 38             //两个圆之间的外距离 就是说两个圆心的距离去除两个半径
 39             var X = (CW - 2 * OffsetX - R * 2 * 3) / 2;
 40             var Y = (CH - 2 * OffsetY - R * 2 * 3) / 2;
 41             PointLocationArr = CaculateNinePointLotion(X, Y);
 42             InitEvent(c, cxt);
 43             //CW=2*offsetX+R*2*3+2*X
 44             Draw(cxt, PointLocationArr, [],null);
 45         }
 46         function Draw(cxt, _PointLocationArr, _LinePointArr,touchPoint) {
 47             if (_LinePointArr.length > 0) {
 48                 cxt.beginPath();
 49                 for (var i = 0; i < _LinePointArr.length; i++) {
 50                     var pointIndex = _LinePointArr[i];
 51                     cxt.lineTo(_PointLocationArr[pointIndex].X, _PointLocationArr[pointIndex].Y);
 52                 }
 53                 cxt.lineWidth = 10;
 54                 cxt.strokeStyle = "#627eed";
 55                 cxt.stroke();
 56                 cxt.closePath();
 57                 if(touchPoint!=null)
 58                 {
 59                     var lastPointIndex=_LinePointArr[_LinePointArr.length-1];
 60                     var lastPoint=_PointLocationArr[lastPointIndex];
 61                     cxt.beginPath();
 62                     cxt.moveTo(lastPoint.X,lastPoint.Y);
 63                     cxt.lineTo(touchPoint.X,touchPoint.Y);
 64                     cxt.stroke();
 65                     cxt.closePath();
 66                 }
 67             }
 68             for (var i = 0; i < _PointLocationArr.length; i++) {
 69                 var Point = _PointLocationArr[i];
 70                 cxt.fillStyle = "#627eed";
 71                 cxt.beginPath();
 72                 cxt.arc(Point.X, Point.Y, R, 0, Math.PI * 2, true);
 73                 cxt.closePath();
 74                 cxt.fill();
 75                 cxt.fillStyle = "#ffffff";
 76                 cxt.beginPath();
 77                 cxt.arc(Point.X, Point.Y, R - 3, 0, Math.PI * 2, true);
 78                 cxt.closePath();
 79                 cxt.fill();
 80                 if(_LinePointArr.indexOf(i)>=0)
 81                 {
 82                     cxt.fillStyle = "#627eed";
 83                     cxt.beginPath();
 84                     cxt.arc(Point.X, Point.Y, R -16, 0, Math.PI * 2, true);
 85                     cxt.closePath();
 86                     cxt.fill();
 87                 }
 88 
 89             }
 90         }
 91         function IsPointSelect(touches,LinePoint)
 92         {
 93             for (var i = 0; i < PointLocationArr.length; i++) {
 94                 var currentPoint = PointLocationArr[i];
 95                 var xdiff = Math.abs(currentPoint.X - touches.pageX);
 96                 var ydiff = Math.abs(currentPoint.Y - touches.pageY);
 97                 var dir = Math.pow((xdiff * xdiff + ydiff * ydiff), 0.5);
 98                 if (dir < R ) {
 99                     if(LinePoint.indexOf(i) < 0){ LinePoint.push(i);}
100                     break;
101                 }
102             }
103         }
104         function InitEvent(canvasContainer, cxt) {
105             var LinePoint = [];
106             canvasContainer.addEventListener("touchstart", function (e) {
107                 IsPointSelect(e.touches[0],LinePoint);
108             }, false);
109             canvasContainer.addEventListener("touchmove", function (e) {
110                 e.preventDefault();
111                 var touches = e.touches[0];
112                 IsPointSelect(touches,LinePoint);
113                 cxt.clearRect(0,0,CW,CH);
114                 Draw(cxt,PointLocationArr,LinePoint,{X:touches.pageX,Y:touches.pageY});
115             }, false);
116             canvasContainer.addEventListener("touchend", function (e) {
117                 cxt.clearRect(0,0,CW,CH);
118                 Draw(cxt,PointLocationArr,LinePoint,null);
119                 alert("密码结果是:"+LinePoint.join("->"));
120                 LinePoint=[];
121             }, false);
122         }
123     </script>
124 </head>
125 <body>
126 <canvas id="myCanvas"></canvas>
127 </body>
128 </html>

 

目录
相关文章
|
10天前
|
数据安全/隐私保护
自定义密码访问单页HTML源码
自定义密码访问单页HTML源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
19 1
|
14天前
|
数据安全/隐私保护
自定义密码访问跳转页面HTML源码
自定义密码访问跳转页面HTML源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
31 0
自定义密码访问跳转页面HTML源码
|
19天前
|
移动开发 HTML5
自适应手机端青蛙吃蚊子小游戏html源码
HTML5青蛙吃蚊子游戏源码分享,音乐可以改的,自己在目录替换一下音乐就可以了训练手速和眼力的时候到了!
23 0
自适应手机端青蛙吃蚊子小游戏html源码
|
1月前
|
存储 移动开发 JavaScript
html5手机Web单页应用实践--起点移动阅读
html5手机Web单页应用实践--起点移动阅读
|
2月前
|
JavaScript 前端开发 数据安全/隐私保护
vue 前端 邮箱、密码、手机号码等输入验证规则
vue 前端 邮箱、密码、手机号码等输入验证规则
237 0
|
4月前
|
存储 JSON 小程序
html在线预览CAD(手机小程序浏览DWG)二次开发图层表的方法
本文档介绍了DWG数据库中图层的存储结构及MxCAD库对图层的操作。图层信息存储于图层层表McDbLayerTable()中,每个记录对应一个图层,包含颜色、线型等属性,且有一个不可删除的默认"0"层。主要操作包括:通过MxCpp.getCurrentMxCAD()获取图层表,使用addLayer()添加图层,遍历图层,以及删除图层。此外,还展示了如何修改图层的关闭、冻结、锁定状态及颜色。提供了在线示例以演示这些功能。
html在线预览CAD(手机小程序浏览DWG)二次开发图层表的方法
|
4月前
|
移动开发 JavaScript 前端开发
APP的HTML5页面经过运营商网络被植入手机管家问题及分析,解决方案见新文章
APP的HTML5页面经过运营商网络被植入手机管家问题及分析,解决方案见新文章
44 0
|
4月前
|
移动开发 API HTML5
HTML5响应式自动采集API壁纸系统源码自适应手机端
HTML5响应式自动采集API壁纸系统源码自适应手机端
76 11
HTML5响应式自动采集API壁纸系统源码自适应手机端
|
4月前
|
搜索推荐 前端开发 UED
html页面实现自动适应手机浏览器(一行代码搞定)
html页面实现自动适应手机浏览器(一行代码搞定)
371 0
|
4月前
|
JavaScript 数据安全/隐私保护
jquery正则表达式验证手机号密码和姓名字段
jquery正则表达式验证手机号密码和姓名字段

热门文章

最新文章