广告
返回顶部
首页 > 资讯 > 精选 >怎么在html5中使用canvas实现手势解锁
  • 403
分享到

怎么在html5中使用canvas实现手势解锁

2023-06-09 12:06:52 403人浏览 泡泡鱼
摘要

怎么在HTML5中使用canvas实现手势解锁?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。demo.html<!DOCTYPE html><h

怎么在HTML5中使用canvas实现手势解?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

demo.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-Scalable=no">    <title>手势解锁</title>    <style type="text/CSS">        body{            text-align: center;            background: #305066;        }        h5{            color: #22C3AA;        }    </style></head><body>    <script type="text/javascript" src="src/index.js"></script>    <script type="text/javascript">        // 1、生成背景        // 2、title生成        // 3、用js动态生成canvas标签        // 4、js方式动态生成h5标签和canvas标签        new canvasLock({chooseType:3}).init();    </script></body></html>

index.js

(function(){                window.canvasLock = function(obj){            this.height = obj.height;            this.width = obj.width;            this.chooseType = obj.chooseType;        };        // js方式动态生成dom        canvasLock.prototype.initDom = function(){            var wrap = document.createElement('div');            var str = '<h5 id="title" class="title">绘制解锁图案</h5>';            wrap.setAttribute('style','position: absolute;top:0;left:0;right:0;bottom:0;');            var canvas = document.createElement('canvas');            canvas.setAttribute('id','canvas');            canvas.style.cssText = 'background-color: #305066;display: inline-block;margin-top: 15px;';            wrap.innerHTML = str;            wrap.appendChild(canvas);            var width = this.width || 300;            var height = this.height || 300;            document.body.appendChild(wrap);            // 高清屏锁放            canvas.style.width = width + "px";            canvas.style.height = height + "px";            canvas.width = width;            canvas.height = height;        }        canvasLock.prototype.drawCle = function(x, y) { // 初始化解锁密码面板            this.ctx.strokeStyle = '#CFE6FF';            this.ctx.lineWidth = 2;            this.ctx.beginPath();            this.ctx.arc(x, y, this.r, 0, Math.PI * 2, true);            this.ctx.closePath();            this.ctx.stroke();        }        canvasLock.prototype.createCircle = function() {// 创建解锁点的坐标,根据canvas的大小来平均分配半径            var n = this.chooseType;            var count = 0;            this.r = this.ctx.canvas.width / (2 + 4 * n);// 公式计算            this.lastPoint = [];            this.arr = [];            this.restPoint = [];            var r = this.r;            for (var i = 0 ; i < n ; i++) {                for (var j = 0 ; j < n ; j++) {                    count++;                    var obj = {                        x: j * 4 * r + 3 * r,                        y: i * 4 * r + 3 * r,                        index: count                    };                    this.arr.push(obj);                    this.restPoint.push(obj);                }            }            this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);            for (var i = 0 ; i < this.arr.length ; i++) {                // 画圆函数                this.drawCle(this.arr[i].x, this.arr[i].y);            }            //return arr;        }        // 程序初始化        canvasLock.prototype.init = function() {            this.initDom();            this.canvas = document.getElementById('canvas');            this.ctx = this.canvas.getContext('2d');            this.touchFlag = false;            // 1、确定半径            // 2、确定每一个圆的中心坐标点            // 3、一行3个圆14个半径,一行4个圆有18个半径            this.createCircle();            this.bindEvent();        }        canvasLock.prototype.bindEvent = function(){            var self = this;            this.canvas.addEventListener("touchstart", function (e) {                // 2、touchstart判断是否点击的位置处于圆内getPosition,处于则初始化                //          * lastpoint、restPoint                                // po有x和y,并且是相较于canvas边距                var po = self.getPosition(e);                console.log(po.x)                // 判断是否在圆内的原理:多出来的这条 x/y < r 在圆内                for (var i = 0 ; i < self.arr.length ; i++) {                    if (Math.abs(po.x - self.arr[i].x) < self.r && Math.abs(po.y - self.arr[i].y) < self.r) {                                                 self.touchFlag = true;                        // lastPoint存放的就是选中的圆圈的x/y坐标值                        self.lastPoint.push(self.arr[i]);                        self.restPoint.splice(i,1);                        break;                    }                }            }, false);            this.canvas.addEventListener("touchmove", function (e) {               // touchmove做的就是:画圆drawPoint和划线drawLine               if (self.touchFlag) {                  self.update(self.getPosition(e));               }            }, false);            this.canvas.addEventListener("touchend", function(e){                if (self.touchFlag) {                    self.storePass(self.lastPoint);                    setTimeout(function(){                       self.reset();                   }, 300);                }            }, false);        }        canvasLock.prototype.getPosition = function(e) {// 获取touch点相对于canvas的坐标            var rect = e.currentTarget.getBoundinGClientRect();            var po = {                x: (e.touches[0].clientX - rect.left),                y: (e.touches[0].clientY - rect.top)            };            return po;        }                canvasLock.prototype.update = function(po) {// 核心变换方法在touchmove时候调用            this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);            // 重新画9个圆圈            for (var i = 0 ; i < this.arr.length ; i++) { // 每帧先把面板画出来                this.drawCle(this.arr[i].x, this.arr[i].y);            }            this.drawPoint();// 画圆            this.drawLine(po);// 画线            // 1、检测手势移动的位置是否处于下一个圆内            // 2、圆内的话则画圆 drawPoint            // 3、已经画过实心圆的圆,无需重复检测            for (var i = 0 ; i < this.restPoint.length ; i++) {                if (Math.abs(po.x - this.restPoint[i].x) < this.r && Math.abs(po.y - this.restPoint[i].y) < this.r) {                    this.drawPoint();                    this.lastPoint.push(this.restPoint[i]);                    this.restPoint.splice(i, 1);                    break;                }            }            console.log(this.lastPoint)        }        canvasLock.prototype.drawLine = function(po) {// 解锁轨迹            this.ctx.beginPath();            this.ctx.lineWidth = 3;            this.ctx.moveTo(this.lastPoint[0].x, this.lastPoint[0].y);            for (var i = 1 ; i < this.lastPoint.length ; i++) {                this.ctx.lineTo(this.lastPoint[i].x, this.lastPoint[i].y);            }            this.ctx.lineTo(po.x, po.y);            this.ctx.stroke();            this.ctx.closePath();        }        canvasLock.prototype.drawPoint = function() { // 初始化圆心             for (var i = 0 ; i < this.lastPoint.length ; i++) {                this.ctx.fillStyle = '#CFE6FF';                this.ctx.beginPath();                this.ctx.arc(this.lastPoint[i].x, this.lastPoint[i].y, this.r / 2, 0, Math.PI * 2, true);                this.ctx.closePath();                this.ctx.fill();            }        }        // 1、检测路径是否是对的        // 2、如果是对的就重置,圆圈变绿        // 3、不对也重置,圆圈变红        // 4、重置        canvasLock.prototype.storePass = function() {            if (this.checkPass()) {                document.getElementById('title').innerHTML = '解锁成功';                this.drawStatusPoint('#2CFF26');            }else{                document.getElementById('title').innerHTML = '解锁失败';                this.drawStatusPoint('red');            }        }        canvasLock.prototype.checkPass = function() {            var p1 = '123',            p2 = '';            for (var i = 0 ; i < this.lastPoint.length ; i++) {                p2 += this.lastPoint[i].index;            }            return p1 === p2;        }        canvasLock.prototype.drawStatusPoint = function(type) {            for (var i = 0 ; i < this.lastPoint.length ; i++) {                this.ctx.strokeStyle = type;                this.ctx.beginPath();                this.ctx.arc(this.lastPoint[i].x, this.lastPoint[i].y, this.r, 0, Math.PI * 2, true);                this.ctx.closePath();                this.ctx.stroke();            }        }        canvasLock.prototype.reset = function(){            this.createCircle();        }})();

关于怎么在html5中使用canvas实现手势解锁问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 怎么在html5中使用canvas实现手势解锁

本文链接: https://www.lsjlt.com/news/255831.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在html5中使用canvas实现手势解锁
    怎么在html5中使用canvas实现手势解锁?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。demo.html<!DOCTYPE html><h...
    99+
    2023-06-09
  • 使用canvas怎么实现一个手势解锁功能
    使用canvas怎么实现一个手势解锁功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。手势解锁通过手指将屏幕上的九个点依次连接起来形成一个图案,所以叫图案解锁。...
    99+
    2023-06-09
  • JS前端使用Canvas快速实现手势解锁特效
    目录前言Demo需要实现的功能初始化数据和页面渲染touchstart 手指开始触摸事件touchmove 监听手指滑动事件touchend 监听手指触摸结束事件页面滚动处理连接的两...
    99+
    2022-11-13
  • 怎么使用HTML5制作屏幕手势解锁功能
    这篇文章主要介绍怎么使用HTML5制作屏幕手势解锁功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现原理 利用HTML5的canvas,将解锁的圈圈划出,利用touch事件解锁这...
    99+
    2022-10-19
  • 怎么在html5中使用canvas手写签名
    怎么在html5中使用canvas手写签名?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。window.onload = function()...
    99+
    2023-06-09
  • 怎么在html5中使用canvas实现柱状图
    这篇文章给大家介绍怎么在html5中使用canvas实现柱状图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用方式首先我们看一下使用方式,参考了部分ECharts的使用方式,先传入要显示图表的html标签,接着调用i...
    99+
    2023-06-09
  • 微信小程序怎么实现手势解锁
    本文小编为大家详细介绍“微信小程序怎么实现手势解锁”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么实现手势解锁”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、项目展示这是一款简单实用的手势解锁工具...
    99+
    2023-06-30
  • 怎么在Android 应用中实现一个九宫格手势锁
    怎么在Android 应用中实现一个九宫格手势锁?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。主要的方法是重写View.onTouchEvent( Motion...
    99+
    2023-05-31
    android roi
  • canvas怎么在html5 中使用
    这期内容当中小编将会给大家带来有关canvas怎么在html5 中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<!DOCTYPE HTML><html><he...
    99+
    2023-06-09
  • 使用Canvas怎么实现一个手势控制功能
    使用Canvas怎么实现一个手势控制功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先讲一下思路:首先跟图需求可以知道,作出这样的效果需要一组对象,每个对象有颜色,所占...
    99+
    2023-06-09
  • 怎么在Html5中使用canvas实现一个粒子时钟
    这篇文章将为大家详细讲解有关怎么在Html5中使用canvas实现一个粒子时钟,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先要创建一个html文件并添加一个canvas画布,如下:<...
    99+
    2023-06-09
  • HTML5中怎么用Canvas实现变形
    本篇内容主要讲解“HTML5中怎么用Canvas实现变形”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中怎么用Canvas实现变形”吧! 变形(即t...
    99+
    2022-10-19
  • 怎么在HTML5中使用Canvas实现一个放大镜效果
    这期内容当中小编将会给大家带来有关怎么在HTML5中使用Canvas实现一个放大镜效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。原理首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上...
    99+
    2023-06-09
  • Vue怎么使用sign-canvas实现在线手写签名
    这篇文章主要讲解了“Vue怎么使用sign-canvas实现在线手写签名”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用sign-canvas实现在线手写签名”吧!效果图:sig...
    99+
    2023-06-30
  • 怎么使用JavaScript实现手势库
    小编给大家分享一下怎么使用JavaScript实现手势库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript的特点1.JavaScript主要用来向...
    99+
    2023-06-14
  • 怎么在Html5中使用Canvas实现动画碰撞检测功能
    本篇文章为大家展示了怎么在Html5中使用Canvas实现动画碰撞检测功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵...
    99+
    2023-06-09
  • 怎么在html5中使用canvas实现一个动态画饼状图
    怎么在html5中使用canvas实现一个动态画饼状图?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。先用canvas画实心圆//伪代码var canv...
    99+
    2023-06-09
  • 怎么在HTML5中使用Canvas对齐文本
    本篇文章给大家分享的是有关怎么在HTML5中使用Canvas对齐文本,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。水平对齐textAlignJavaScript Code复制内...
    99+
    2023-06-09
  • 怎么在html5中使用canvas压缩图片
    这期内容当中小编将会给大家带来有关怎么在html5中使用canvas压缩图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。知识点:canvas 的 toDataURL('image/png'...
    99+
    2023-06-09
  • 怎么在html5中利用canvas实现一个弹幕功能
    本篇文章为大家展示了怎么在html5中利用canvas实现一个弹幕功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。(function () {   ...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作