Flex 实现鼠标手势 无码 );

来源:互联网 发布:电子钢琴软件下载 编辑:程序博客网 时间:2024/06/11 09:17

声明:自己想的、写的东西,转载请注明出处; 不要向我要代码; FROM CSDN ID: wander000

 

目的:在做小程序时,显示一些重要的数据如帐号密码等,不想让别人直接看到,在指定组件上按规定好的轨迹晃动鼠标才显示。

 

问题:一、直接打开数据库不就看到明码了?二、怎么判断鼠标轨迹的形状?

 

解决:一、数据库存取时用上加解密。二、不判断轨迹的形状,判断经过的方向。

 

    不管三七二十一,先把经过该组件的鼠标路径记录下来再说:

    

    TrackArr.push( { "x" : e.localX, "y" : e.localY } );

    //TrackArr记录鼠标移动的轨迹

    

    其它事项:1、鼠标移出该组件,TrackArr清空。

                   2、鼠标一段时间不动表示动作结束,开始计算。

                   3、解锁后不应再响应事件,但在N秒内没有操作数据将再次加锁。

    这几项问题不在这儿细讲了。

    

    

    那现在有了轨迹数据,怎么判断是否按规定的轨迹晃动了呢?

    先看下图:

   

       

    假设以中心红点为第一点,第二点落在A的区域内,这两点的线段就认为是向上。

 

    那又是怎么判断第二点在哪个区域呢?加减乘除白~

    第二点的x <= 第一点的x : A D C 区     否则 : A B C 区

    第二点的y <= 第一点的y : A D B 区     否则 : D B C 区

    第二点的x - 第一点的x 的绝对值 / 第二点的y - 第一点的y 的绝对值 <=1  :  A C 区    否则  :   D B 区

 

    好吧,你需要判断被除数是否为0(如果是0怎么办?考考你y2-y1=0……哪两区会出现这情况 ^.^) ,经过三重判断过滤后,只有一个区域会剩下,如:

    x1=10 y1=10  

    x2=15 y2=20 

    第一重判断x2>x1,ABC区

    第二重判断y2>y1,DBC区

    第三重判断|15-10|/|20-10|<1,AC区

    结果当然就是C区喽。

   

    具体代码自己试试吧!

 

 

   

    就这样第一点和第二点判断,第二点和第三点判断,以此类推……

   

    第一次判断是A区,tmpArr.push( "A" ); 

   

    第二次判断还是A,再看tmpArr最后一个值是不是A。如果是,忽略;如果不是,tmpArr.push( "{当前区}" );

    ……省略至最后一次判断……

 

    最后 tmpArr.toString() == AnswerArr.toString()

    //AnswerArr记录解锁码的,如AnswerArr = new array("A","D","C","B"); 表示解锁轨迹是上左下右。

    相等就是和规定的解锁轨迹一样,验证通过,显示正常数据。

 

    这样,貌似完成了,测试也成功了。不过给别人测试的时候老是不成功,仔细想了想知道了:在晃动鼠标的时候免不了一点点的错误,看来我们需要增加一个缓冲量。

 

    在判断方向后加:

    IF ( 当前两点的方向与tmpArr最后一个值不同 )

    {

        计数器+1

        IF ( 计数器 > 缓冲量 )

        {

            tmpArr.push当前方向并清空计数器。

        }

    }

    ELSE

    {

        清空计数器

    }

 

 

 

 

    验证失败大多是因为没有画出轨迹,无法目测造成的,其实也想画出轨迹,但我的目的就是让其他人不知道有这样的功能,所以没加,就连验证失败的提示都没有。

 

 

    别忘了还有这几个问题:

       1、鼠标移出该组件,TrackArr清空。

       2、鼠标一段时间不动表示动作结束,开始计算。

       3、解锁后不应再记录轨迹,但在N秒内没有操作数据将再次加锁。

原创粉丝点击