最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js+html5实现手机九宫格密码解锁功能

来源:动视网 责编:小采 时间:2020-11-27 22:10:51
文档

js+html5实现手机九宫格密码解锁功能

js+html5实现手机九宫格密码解锁功能:HTML5真的是很强大,前端时间看到一个canvas实现九宫格的密码解锁。今天抽出时间模仿了一个,特定分享一下! 效果截图如下: 效果看起来还不错吧! 源码如下: <!DOCTYPE html> <html> <head lang=zh-CN> &
推荐度:
导读js+html5实现手机九宫格密码解锁功能:HTML5真的是很强大,前端时间看到一个canvas实现九宫格的密码解锁。今天抽出时间模仿了一个,特定分享一下! 效果截图如下: 效果看起来还不错吧! 源码如下: <!DOCTYPE html> <html> <head lang=zh-CN> &


HTML5真的是很强大,前端时间看到一个canvas实现九宫格的密码解锁。今天抽出时间模仿了一个,特定分享一下!

效果截图如下:

效果看起来还不错吧!

源码如下:

<!DOCTYPE html>
<html>
<head lang="zh-CN">
 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
 <meta charset="UTF-8">
 <title>html5实现网页解锁功能</title>
 <style type="text/css">
 html, body {
 margin: 0;
 padding: 0;
 width: 100%;
 height: 100%;
 }
 </style>
 <script type="text/javascript">
 /**
 * 半径,画布宽度,画布高度,画布x内边距,画布y内边距
 */
 var R = 26, canvasWidth = 400, canvasHeight = 320, OffsetX = 30, OffsetY = 30;
 var circleArr = [];
 function createCirclePoint(diffX, diffY) {
 for (var row = 0; row < 3; row++) {
 for (var col = 0; col < 3; col++) {
 // 计算圆心坐标
 var Point = {
 X: (OffsetX + col * diffX + ( col * 2 + 1) * R),
 Y: (OffsetY + row * diffY + (row * 2 + 1) * R)
 };
 circleArr.push(Point);
 }
 }
 }
 window.onload = function () {
 var canvas = document.getElementById("lockCanvas");
 canvasWidth = document.body.offsetWidth;//网页可见区域宽
 canvas.width = canvasWidth;
 canvas.height = canvasHeight;
 var cxt = canvas.getContext("2d");
 /**
 * 每行3个圆
 * OffsetX为canvas x方向内边距
 * */
 var X = (canvasWidth - 2 * OffsetX - R * 2 * 3) / 2;
 var Y = (canvasHeight - 2 * OffsetY - R * 2 * 3) / 2;
 
 createCirclePoint(X, Y);
 
 bindEvent(canvas, cxt);
 //CW=2*offsetX+R*2*3+2*X
 Draw(cxt, circleArr, [],null);
 }
 function Draw(cxt, circleArr, pwdArr,touchPoint) {
 if (pwdArr.length > 0) {
 cxt.beginPath();
 for (var i = 0; i < pwdArr.length; i++) {
 var pointIndex = pwdArr[i];
 cxt.lineTo(circleArr[pointIndex].X, circleArr[pointIndex].Y);
 }
 cxt.lineWidth = 10;
 cxt.strokeStyle = "#627eed";
 cxt.stroke();
 cxt.closePath();
 if(touchPoint!=null){
 var lastPointIndex=pwdArr[pwdArr.length-1];
 var lastPoint=circleArr[lastPointIndex];
 cxt.beginPath();
 cxt.moveTo(lastPoint.X,lastPoint.Y);
 cxt.lineTo(touchPoint.X,touchPoint.Y);
 cxt.stroke();
 cxt.closePath();
 }
 }
 for (var i = 0; i < circleArr.length; i++) {
 var Point = circleArr[i];
 cxt.fillStyle = "#627eed";
 cxt.beginPath();
 cxt.arc(Point.X, Point.Y, R, 0, Math.PI * 2, true);
 cxt.closePath();
 cxt.fill();
 cxt.fillStyle = "#ffffff";
 cxt.beginPath();
 cxt.arc(Point.X, Point.Y, R - 3, 0, Math.PI * 2, true);
 cxt.closePath();
 cxt.fill();
 if(pwdArr.indexOf(i)>=0){
 cxt.fillStyle = "#627eed";
 cxt.beginPath();
 cxt.arc(Point.X, Point.Y, R -16, 0, Math.PI * 2, true);
 cxt.closePath();
 cxt.fill();
 }
 
 }
 }
 
 /**
 * 计算选中的密码 
 */
 function getSelectPwd(touches,pwdArr){
 for (var i = 0; i < circleArr.length; i++) {
 var currentPoint = circleArr[i];
 var xdiff = Math.abs(currentPoint.X - touches.pageX);
 var ydiff = Math.abs(currentPoint.Y - touches.pageY);
 var dir = Math.pow((xdiff * xdiff + ydiff * ydiff), 0.5);
 if(dir > R || pwdArr.indexOf(i) >= 0)
 continue;
 pwdArr.push(i);
 break;
 }
 }
 
 /**
 * 给画布绑定事件
 */
 function bindEvent(canvas, cxt) {
 var pwdArr = [];
 canvas.addEventListener("touchstart", function (e) {
 getSelectPwd(e.touches[0],pwdArr);
 }, false);
 canvas.addEventListener("touchmove", function (e) {
 e.preventDefault();
 var touches = e.touches[0];
 getSelectPwd(touches,pwdArr);
 cxt.clearRect(0,0,canvasWidth,canvasHeight);
 Draw(cxt,circleArr,pwdArr,{X:touches.pageX,Y:touches.pageY});
 }, false);
 canvas.addEventListener("touchend", function (e) {
 cxt.clearRect(0,0,canvasWidth,canvasHeight);
 Draw(cxt,circleArr,pwdArr,null);
 alert("密码结果是:"+pwdArr.join("->"));
 pwdArr=[];
 }, false);
 }
 </script>
</head>
<body>
<canvas id="lockCanvas"></canvas>
</body>
</html>

文档

js+html5实现手机九宫格密码解锁功能

js+html5实现手机九宫格密码解锁功能:HTML5真的是很强大,前端时间看到一个canvas实现九宫格的密码解锁。今天抽出时间模仿了一个,特定分享一下! 效果截图如下: 效果看起来还不错吧! 源码如下: <!DOCTYPE html> <html> <head lang=zh-CN> &
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top