您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

在网页中实现:手势解锁密码

时间:2022-02-16 17:35:47  来源:网易号  作者:

手机的手势解锁,是很好用的功能。方便,而且比输入密码更安全。

 

小知识:为什么手势密码更安全?
传统密码输入,有按键输入过程,而按下的按键,可能被木马软件记录。且密码输入框中的密码,也可能被非法获取。而手势密码则不存在这些问题。

 

在网页应用中,是否可以实现一个同样的效果呢?

当然可以,本文就来实现一个。

实现效果:

操作时,用鼠标移动模拟手指触摸。

源码:

创建canvas手势输入框的部分:

将此部分保存为js文件,给后面的代码引用。

注:请看到文章最后,后面还有重点内容。

 

(function ($) {
var GesturePasswd= function (element, options) {
this.$element = $(element);
this.options = options;
var that=this;
this.pr=options.pointRadii;
this.rr=options.roundRadii;
this.o=options.space;
this.color=options.color;
//全局样式
this.$element.css({
"position":"relation",
"width":this.options.width,
"height":this.options.height,
"background-color":options.backgroundColor,
"overflow":"hidden",
"cursor":"default"
//选择器规范
if(! $(element).attr("id"))
$(element).attr("id",(Math.random()*65535).toString());
this.id="#"+$(element).attr("id");
var Point = function (x,y){
this.x =x;this.y=y
this.result="";
this.pList=[];
this.sList=[];
this.tP=new Point(0,0);
this.$element.Append('');
this.$c= $(this.id+" .mAIn-c")[0];
this.$ctx=this.$c.getContext('2d');
this.initDraw=function(){
this.$ctx.strokeStyle=this.color;
this.$ctx.lineWidth=2;
for(var j=0; j<3;j++ ){
for(var i =0;i<3;i++){
this.$ctx.moveTo(this.o/2+this.rr*2+i*(this.o+2*this.rr),this.o/2+this.rr+j*(this.o+2*this.rr));
this.$ctx.arc(this.o/2+this.rr+i*(this.o+2*this.rr),this.o/2+this.rr+j*(this.o+2*this.rr),this.rr,0,2*Math.PI);
var tem=new Point(this.o/2+this.rr+i*(this.o+2*this.rr),this.o/2+this.rr+j*(this.o+2*this.rr));
if (that.pList.length < 9)
this.pList.push(tem);

this.$ctx.stroke();
this.initImg=this.$ctx.getImageData(0,0,this.options.width,this.options.height);
this.initDraw();
this.isIn=function(x,y){
for (var p in that.pList){
if(( Math.pow((x-that.pList[p]["x"]),2)+Math.pow((y-that.pList[p]["y"]),2) ) < Math.pow(this.rr,2)){
return that.pList[p];

return 0;
this.pointDraw =function(c){
if (arguments.length>0){
that.$ctx.strokeStyle=c;
that.$ctx.fillStyle=c;
for (var p in that.sList){
that.$ctx.moveTo(that.sList[p]["x"]+that.pr,that.sList[p]["y"]);
that.$ctx.arc(that.sList[p]["x"],that.sList[p]["y"],that.pr,0,2*Math.PI);
that.$ctx.fill();

this.lineDraw=function (c){
if (arguments.length>0){
that.$ctx.strokeStyle=c;
that.$ctx.fillStyle=c;
if(that.sList.length > 0){
for( var p in that.sList){
if(p == 0){
console.log(that.sList[p]["x"],that.sList[p]["y"]);
that.$ctx.moveTo(that.sList[p]["x"],that.sList[p]["y"]);
continue;
that.$ctx.l.NETo(that.sList[p]["x"],that.sList[p]["y"]);
console.log(that.sList[p]["x"],that.sList[p]["y"]);

this.allDraw =function(c){
if (arguments.length>0){
this.pointDraw(c);
this.lineDraw(c);
that.$ctx.stroke();
else {
this.pointDraw();
this.lineDraw();

this.draw=function(x,y){
that.$ctx.clearRect(0,0,that.options.width,that.options.height);
that.$ctx.beginPath();
that.$ctx.putImageData(this.initImg,0,0);
that.$ctx.lineWidth=4;
that.pointDraw(that.options.lineColor);
that.lineDraw(that.options.lineColor);
that.$ctx.lineTo(x,y);
that.$ctx.stroke();
this.pointInList=function(poi,list){
for (var p in list){
if( poi["x"] == list[p]["x"] && poi["y"] == list[p]["y"]){
return ++p;

return false;
this.touched=false;
$(this.id).on ("mousedown touchstart",{that:that},function(e){
e.data.that.touched=true;
$(this.id).on ("mouseup touchend",{that:that},function(e){
e.data.that.touched=false;
that.$ctx.clearRect(0,0,that.options.width,that.options.height);
that.$ctx.beginPath();
that.$ctx.putImageData(e.data.that.initImg,0,0);
that.allDraw(that.options.lineColor);
for(var p in that.sList){
if(e.data.that.pointInList(that.sList[p], e.data.that.pList)){
e.data.that.result= e.data.that.result+(e.data.that.pointInList(that.sList[p], e.data.that.pList)).toString();

$(element).trigger("hasPasswd",that.result);
$(this.id).on('touchmove mousemove',{that:that}, function(e) {
if(e.data.that.touched){
var x= e.pageX || e.originalEvent.targetTouches[0].pageX ;
var y = e.pageY || e.originalEvent.targetTouches[0].pageY;
x=x-that.$element.offset().left;
y=y-that.$element.offset().top;
var p = e.data.that.isIn(x, y);
console.log(x)
if(p != 0 ){
if ( !e.data.that.pointInList(p,e.data.that.sList)){
e.data.that.sList.push(p);

console.log( e.data.that.sList);
e.data.that.draw(x, y);

$(this.id).on('passwdWrong',{that:that}, function(e) {
that.$ctx.clearRect(0,0,that.options.width,that.options.height);
that.$ctx.beginPath();
that.$ctx.putImageData(that.initImg,0,0);
that.allDraw("#cc1c21");
that.result="";
that.pList=[];
that.sList=[];
setTimeout(function(){
that.$ctx.clearRect(0,0,that.options.width,that.options.height);
that.$ctx.beginPath();
that.initDraw()
},500)
$(this.id).on('passwdRight',{that:that}, function(e) {
that.$ctx.clearRect(0,0,that.options.width,that.options.height);
that.$ctx.beginPath();
that.$ctx.putImageData(that.initImg,0,0);
that.allDraw("#00a254");
that.result="";
that.pList=[];
that.sList=[];
setTimeout(function(){
that.$ctx.clearRect(0,0,that.options.width,that.options.height);
that.$ctx.beginPath();
that.initDraw()
},500)

GesturePasswd.DEFAULTS = {
zindex :100,
roundRadii:25,
pointRadii:6,
space:30,
width:240,
height:240,
lineColor:"#00aec7",
backgroundColor:"#252736",
color:"#FFFFFF"
function Plugin(option,arg) {
return this.each(function () {
var $this = $(this);
var options = $.extend({}, GesturePasswd.DEFAULTS, typeof option == 'object' && option);
var data = $this.data('GesturePasswd');
var action = typeof option == 'string' ? option : NaN;
if (!data) $this.data('danmu', (data = new GesturePasswd(this, options)));
if (action) data[action](arg);

$.fn.GesturePasswd = Plugin;
$.fn.GesturePasswd.Constructor = GesturePasswd;
})(jQuery);

 

密码校验部分:

 

正确的密码是一个字母“Z”的形状哦!
$(function(){
$("#gesturepwd").GesturePasswd({
backgroundColor:"#252736", //背景色
color:"#FFFFFF", //主要的控件颜色
roundRadii:25, //大圆点的半径
pointRadii:6, //大圆点被选中时显示的圆心的半径
space:30, //大圆点之间的间隙
width:240, //整个组件的宽度
height:240, //整个组件的高度
lineColor:"#00aec7", //用户画出线条的颜色
zindex :100 //整个组件的css z-index属性
$("#gesturepwd").on("hasPasswd",function(e,passwd){
var result;
if(passwd == "1235789"){
result=true;
}else{
result=false;
if(result == true){
$("#gesturepwd").trigger("passwdRight");
setTimeout(function(){
//密码验证正确后的其他操作,打开新的页面等。。。
alert("密码正确!")
},500); //延迟半秒以照顾视觉效果
else{
$("#gesturepwd").trigger("passwdWrong");
//密码验证错误后的其他操作。。。

 

 

代码安全性:

手势密码当然也是要进行校验的,在上述验证的代码中,注意这一部分:

如果在网页查看网页源码,就会被看到JS代码中的密码。

为了防止这种问题的发生,可以用JShaman对这部分代码进行加密:

加密后的代码,将成为:

这样代码中密码泄露的问题也解决了。

完美的网页手势解锁功能完成。



Tags:密码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
注意!密码、验证码都没说,钱是怎么被骗走的?
转自:科普中国“我密码和验证码都没有给他,为什么钱还是被骗子骗走了?”骗子是怎么做到的呢?真实案例今年1月,武汉市民张某在家接到一陌生电话,电话自称是某平台的客服,告诉张某购...【详细内容】
2024-04-11  Search: 密码  点击:(4)  评论:(0)  加入收藏
电脑怎么重新设置密码?
数字化时代,每个人的生活都与各种密码紧密相连。电脑密码作为保护个人隐私和数据安全的第一道防线,重要性不言而喻。忘记电脑密码是个普遍且棘手的问题。本文将详细介绍在不同...【详细内容】
2024-04-11  Search: 密码  点击:(5)  评论:(0)  加入收藏
数字社交的新典范:解析Facebook的成功密码
在当今数字化时代,社交媒体已经成为人们日常生活的重要组成部分,而Facebook作为最知名的社交媒体平台之一,其成功之处备受瞩目。本文将深入解析Facebook的成功密码,探讨其在数字...【详细内容】
2024-04-10  Search: 密码  点击:(4)  评论:(0)  加入收藏
手机就可以修改WiFi密码,进行网络提速,还能防止别人蹭网
随着网络的普及和使用频率的增加,很多人可能遇到了一些网络管理上的问题,比如忘记了WiFi密码、网络速度缓慢、或者发现有不明设备在家中蹭网。相信朋友们也曾遇到过吧?但是,你知...【详细内容】
2024-04-03  Search: 密码  点击:(7)  评论:(0)  加入收藏
未来5年微短剧或撬动千亿市场 短剧的下一个“财富密码”是它?
数据来源:中国网络视听发展报告(2024)“当下,网络视听是全球最大最火爆、最有前途,且充满活力的行业之一。而短剧尤其是微短剧以及延伸出来的网络新型直播,是目前中国和全球网络视...【详细内容】
2024-03-28  Search: 密码  点击:(14)  评论:(0)  加入收藏
中国三大运营商共同发布通过GSMA Open Gateway认证的一次性密码 API
3月26日,北京:中国三大领先的移动运营商&mdash;&mdash;中国移动、中国电信和中国联通今日发布商用OTP API(一次性密码API)服务,并通过了GSMA Open Gateway认证。此次发布标志着中...【详细内容】
2024-03-26  Search: 密码  点击:(22)  评论:(0)  加入收藏
微信转账时弹出“这一行字”,别急着输付款密码,已有不少人中招
在我们日常生活中,微信转账已经成为了一种非常便捷的支付方式。然而,就在我们使用这种支付方式时,有时会遇到一些看似平常却隐藏着风险的提示信息。今天,我就要提醒大家,如果在微...【详细内容】
2024-03-14  Search: 密码  点击:(16)  评论:(0)  加入收藏
手机设置指纹好还是密码好?
近日,我和一位朋友正在一家咖啡馆品茶聊天,话题自然而然地转到了手机的安全性。我拿起咖啡杯,微笑着问道:“你觉得手机指纹锁好,还是密码锁更安全呢?”这个问题引发了我们长达数小...【详细内容】
2024-03-11  Search: 密码  点击:(11)  评论:(0)  加入收藏
忘记Word文档密码?教你如何快速解密解决!
在网上找回word文档密码、去除word文档密码非常简单。具体步骤如下:1.百度搜索““六牛助手”官网”;2.点击“立即开始”并在用户中心上传需要解密的文件,稍等片刻即可找回密码...【详细内容】
2024-03-01  Search: 密码  点击:(25)  评论:(0)  加入收藏
人人都该懂密码学,通用密码学原理与应用实战|完结无密
来百度APP畅享高清图片//下栽のke:http://quangneng.com/4061/标题:人人都该懂密码学:通用密码学原理与应用实战在当今数字化的世界中,密码学已经成为了信息安全的核心。不论是...【详细内容】
2024-02-06  Search: 密码  点击:(51)  评论:(0)  加入收藏
▌简易百科推荐
JavaScript的异步编程常见模式
在JavaScript中,异步编程是一种处理长时间运行操作(如网络请求或I/O操作)的常见方式。它允许程序在等待这些操作完成时继续执行其他任务,从而提高应用程序的响应性和性能。JavaS...【详细内容】
2024-04-12  靳国梁    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  前端新世界  微信公众号  Tags:JavaScript   点击:(6)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践&mdash;&mdash;如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  前端新世界  微信公众号  Tags:JavaScript   点击:(27)  评论:(0)  加入收藏
又出新JS运行时了!JS运行时大盘点
Node.js是基于Google V8引擎的JavaScript运行时,以非阻塞I/O和事件驱动架构为特色,实现全栈开发。它跨平台且拥有丰富的生态系统,但也面临安全性、TypeScript支持和性能等挑战...【详细内容】
2024-03-21  前端充电宝  微信公众号  Tags:JS   点击:(26)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  前端历险记  微信公众号  Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  WangLiwen    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  京东云开发者    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06    51CTO  Tags:JavaScript   点击:(53)  评论:(0)  加入收藏
JS小知识,使用这6个小技巧,避免过多的使用 if 语句
最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要...【详细内容】
2024-01-30  前端达人  今日头条  Tags:JS   点击:(58)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  南城大前端  微信公众号  Tags:JavaScript   点击:(71)  评论:(0)  加入收藏
站内最新
站内热门
站内头条