• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > HTML5实现手势屏幕解锁

HTML5实现手势屏幕解锁

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5教程,HTML5中国,HTML5实现手势屏幕解锁,html5cn,html5资料,html5文章,html5内等相关知识,匿名希望在学习及工作中可以帮助到您
  效果展示

  实现原理
  利用HTML5的canvas,将解锁的圈圈划出,利用touch事件解锁这些圈圈,直接看代码。

  • var n = chooseType;// 画出n*n的矩阵
  • lastPoint = [];
  • arr = [];
  • restPoint = [];
  • r = ctx.canvas.width / (2 + 4 * n);// 公式计算 半径和canvas的大小有关
  • for (var i = 0 ; i < n ; i++) {
  • for (var j = 0 ; j < n ; j++) {
  • arr.push({
  • x: j * 4 * r + 3 * r,
  • y: i * 4 * r + 3 * r
  • });
  • restPoint.push({
  • x: j * 4 * r + 3 * r,
  • y: i * 4 * r + 3 * r
  • });
  • }
  • }
  • //return arr;
  • }
  • 复制代码
      canvas里的圆圈画好之后可以进行事件绑定
  • can.addEventListener("touchstart", function (e) {
  • var po = getPosition(e);
  • console.log(po);
  • for (var i = 0 ; i < arr.length ; i++) {
  • if (Math.abs(po.x - arr[i].x) < r && Math.abs(po.y - arr[i].y) < r) { // 用来判断起始点是否在圈圈内部

  • touchFlag = true;
  • drawPoint(arr[i].x,arr[i].y);
  • lastPoint.push(arr[i]);
  • restPoint.splice(i,1);
  • break;
  • }
  • }
  • }, false);
  • can.addEventListener("touchmove", function (e) {
  • if (touchFlag) {
  • update(getPosition(e));
  • }
  • }, false);
  • can.addEventListener("touchend", function (e) {
  • if (touchFlag) {
  • touchFlag = false;
  • storePass(lastPoint);
  • setTimeout(function(){

  • init();
  • }, 300);
  • }


  • }, false);
  • }
  • 复制代码
      接着到了最关键的步骤绘制解锁路径逻辑,通过touchmove事件的不断触发,调用canvas的moveTo方法和lineTo方法来画出折现,同时判断是否达到我们所画的圈圈里面,其中lastPoint保存正确的圈圈路径,restPoint保存全部圈圈去除正确路径之后剩余的。 Update方法:
  • ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);

  • for (var i = 0 ; i < arr.length ; i++) { // 每帧先把面板画出来
  • drawCle(arr[i].x, arr[i].y);
  • }

  • drawPoint(lastPoint);// 每帧花轨迹
  • drawLine(po , lastPoint);// 每帧画圆心

  • for (var i = 0 ; i < restPoint.length ; i++) {
  • if (Math.abs(po.x - restPoint[i].x) < r && Math.abs(po.y - restPoint[i].y) < r) {
  • drawPoint(restPoint[i].x, restPoint[i].y);
  • lastPoint.push(restPoint[i]);
  • restPoint.splice(i, 1);
  • break;
  • }
  • }

  • }
  • 复制代码
      最后就是收尾工作,把路径里面的lastPoint保存的数组变成密码存在localstorage里面,之后就用来处理解锁验证逻辑了。
  • if (pswObj.step == 1) {
  • if (checkPass(pswObj.fpassword, psw)) {
  • pswObj.step = 2;
  • pswObj.spassword = psw;
  • document.getElementById('title').innerHTML = '密码保存成功';
  • drawStatusPoint('#2CFF26');
  • window.localStorage.setItem('passwordx', JSON.stringify(pswObj.spassword));
  • window.localStorage.setItem('chooseType', chooseType);
  • } else {
  • document.getElementById('title').innerHTML = '两次不一致,重新输入';
  • drawStatusPoint('red');
  • delete pswObj.step;
  • }
  • } else if (pswObj.step == 2) {
  • if (checkPass(pswObj.spassword, psw)) {
  • document.getElementById('title').innerHTML = '解锁成功';
  • drawStatusPoint('#2CFF26');
  • } else {
  • drawStatusPoint('red');
  • document.getElementById('title').innerHTML = '解锁失败';
  • }
  • } else {
  • pswObj.step = 1;
  • pswObj.fpassword = psw;
  • document.getElementById('title').innerHTML = '再次输入';
  • }

  • }
  • 复制代码
      解锁组件
      将这个HTML5解锁写成了一个组件,放在https://github.com/lvming6816077/H5lock

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

    您可能想查找下面的文章:

    • 一款利用html5和css3动画排列人物头像的实例演示
    • html5教程调用绘图api画简单的圆形代码分享
    • html5教程画矩形代码分享
    • html5教程制作简单画板代码分享
    • html5基础教程常用技巧整理
    • html5教程-Canvas入门
    • html5教程画矩形代码分享
    • HTML5晃动DeviceMotionEvent事件
    • HTML5教程之html 5 本地数据库(Web Sql Database)
    • HTML5中对contenteditable属性的解释与规定

    相关文章

    • 2018-12-03如何 精通各种Web前端技术?
    • 2017-08-06用HTML5制作视频拼图的教程
    • 2017-08-06html5中JavaScript removeChild 删除所有节点
    • 2018-12-03实例讲解利用HTML5 Canvas API操作图形旋转的方法_html5教程技巧
    • 2018-12-03SVG基础|绘制SVG圆形和椭圆形
    • 2018-12-03什么是前端和后端
    • 2018-12-03HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题_html5教程技巧
    • 2018-12-03HTML5中的事件属性
    • 2018-12-03HTML5的表单中关于所有type类型的详细介绍
    • 2017-08-06html5记忆翻牌游戏实现思路及代码

    文章分类

    • html/xhtml
    • html5
    • CSS
    • XML/XSLT
    • Dreamweaver教程
    • Frontpage教程
    • 心得技巧
    • bootstrap
    • vue
    • AngularJS
    • HBuilder教程
    • css3
    • 浏览器兼容
    • div/css
    • 网页编辑器
    • axure

    最近更新的内容

      • 如何创建 HTML5 Canvas 电信网络拓扑图
      • HTML5中的<aside>元素与<article>元素 实例详解
      • HTML 5基础之HTML 5 API的威力
      • HTML5 canvas基本绘图之文字渲染
      • 详解HTML5中的拖放事件(Drag 和 drop)
      • HTML5实现时钟效果
      • 服务器推送事件的详细介绍
      • html5的新玩法——语音搜索_html5教程技巧
      • 如何实现HTML5页面音视频在微信和app下自动播放
      • HTML5上传文件显示进度的实现代码_html5教程技巧

    关于我们 - 联系我们 - 免责声明 - 网站地图

    ©2020-2025 All Rights Reserved. linkedu.com 版权所有