• Flex 监听键盘组合键的方法


    KeyboardEvent 是 Flex 中的键盘事件,有两种类型:KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP ,它们和其他事件的发生、处理过程相同,但要处理组合事件时需要特别的处理。
    我们在完成注册验证功能时,需要在注册页面通过组合键调出输入验证码的区域,暂时把组合键定为:ctrl + shift + c。要监听组合键事件,主要步骤如下:
    1> 监听特定的按键
    当我们在程序中添加键盘事件的监听后,可以监听到任意的按键动作,在每个出发的 event 中,都保存了按键的信息,例如:
    altKey : Boolean
    在 Windows 中,指示 Alt 键是处于活动状态 (true) 还是非活动状态 (false);在 Mac OS 中,指示 Option 键是否处于活动状态。

    charCode : uint
    包含按下或释放的键的字符代码值。

    commandKey : Boolean
    指示 Command 键是处于活动状态 (true) 还是非活动状态 (false)。

    controlKey : Boolean
    指示 Ctrl 键是处于活动状态 (true) 还是非活动状态 (false)。

    ctrlKey : Boolean
    在 Windows 中,指示 Ctrl 键是处于活动状态 (true) 还是非活动状态 (false);在 Mac OS 中,指示 Ctrl 键或 Command 键是否处于活动状态。

    keyCode : uint
    按下或释放的键的键控代码值。

    keyLocation : uint
    指示键在键盘上的位置。

    shiftKey : Boolean
    指示 Shift 功能键是处于活动状态 (true) 还是非活动状态 (false)。

    可以现在下面的程序里实验出 ctrl 、 shift 、 c 各自的 keyCode 分别为 17、16、67。
    private function appComplete():void{
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN,myKeyDown);
    }

    private function myKeyDown(evt:KeyboardEvent):void{
    t1.text += '\nevt.charCode='+evt.charCode + '\nevt.keyCode='+ evt.keyCode + '\nevt.keyLocation='+ evt.keyLocation + "按下\n";
    }
    ..................

    2> 监听组合的按键
    知道要监听的 keyCode 后,可以设置三个初始为 false 的 Boolean 变量记录三个键的 press or up 的情况,当监听到 KEY_DOWN 事件时,判断是否为三个键之一被按下,若是则设置相应的值为 true ,末尾判断是否三个键都被按下;若是监听到 KEY_UP 事件,判断是否为三个键之一被放开,若是则设置相应的值为 false。
    值得注意的是,按住某个键会不停触发 KEY_DOWN 事件,不能简单的在判断成功后把 bool 值取反,具体做法可看最后的代码。

    3> 监听到组合键时的处理方法
    Handler 方法和其它事件的相同,组合键监听方法示例如下(myPress方法既完成工作,其它两个方法只用来显示):

    <?xml version="1.0" encoding="utf-8"?>


    import flash.events.KeyboardEvent;

    private var key1:Boolean = false;
    private var key2:Boolean = false;
    private var key3:Boolean = false;

    private function appComplete():void{
    this.stage.addEventListener(KeyboardEvent.KEY_UP,myKeyUp);
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN,myKeyDown);
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN,myPress);
    }

    private function myKeyUp(evt:KeyboardEvent):void{
    //t1.text+= 'evt.charCode='+evt.charCode + '\nevt.keyCode='+ evt.keyCode + '\nevt.keyLocation='+ evt.keyLocation + " 弹起\n"
    // t1.text+="\nup"+evt.keyCode;
    if (evt.keyCode == 17) {
    key1 = false;
    t1.text += "\n key1 up";
    }
    if (evt.keyCode == 16) key2 = false;
    if (evt.keyCode == 67) {
    key3 = false;
    t1.text += "\n key3 up";
    }
    }

    private function myKeyDown(evt:KeyboardEvent):void{
    t1.text += '\nevt.charCode='+evt.charCode + '\nevt.keyCode='+ evt.keyCode + '\nevt.keyLocation='+ evt.keyLocation + "按下\n";
    t1.text += '\n --- evt.ctrlKey='+evt.ctrlKey;
    t1.text += ' --- evt.altKey='+evt.altKey;
    t1.text += ' --- evt.shiftKey='+evt.shiftKey;
    }

    //下面方法演示每次按下上下左右键头,文本框移动+5像素;
    private function myPress(evt:KeyboardEvent):void{
    if (evt.keyCode == 17 && key1 == false) {
    key1 = true;
    t1.text += "\n key1 press";
    }
    if (evt.keyCode == 16 && key2 == false) {
    key2 = true;
    t1.text += "\n key2 press";
    }
    if (evt.keyCode == 67 && key3 == false) {
    key3 = true;
    t1.text += "\n key3 press";
    }
    if (key1 == true && key2 == true && key3 == true) t2.text += "\nsuccess";

    // if(evt.keyCode==39){ //右
    // t2.x += t2.x+5;
    // }
    // if(evt.keyCode==38){//上
    // t2.y += t2.y-5;
    // }
    // if(evt.keyCode==40){//下
    // t2.y += t2.y+5;
    // }
    // if(evt.keyCode==37){//左
    // t2.x += t2.x-5;
    // }
    }

    ]]>



    相关连接:http://livedocs.adobe.com/flex/3_cn/
    http://hi.baidu.com/artgou/blog/item/4998d5d6fd16922607088be3.html

  • 相关阅读:
    安卓界面基本组件------计时器
    安卓界面组件----时间日期拾取器
    安卓界面组件----列表视图
    安卓组件------列表选择框
    Redis 开启远程访问
    收集的一个关于大批量插入数据的代码
    Server.MapPath和Request.PhysicalApplicationPath的异同
    C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
    cocos2d-x3.2在xcode6.1下的 环境搭建
    STL源码剖析(适配器)
  • 原文地址:https://www.cnblogs.com/bmate/p/1868228.html
Copyright © 2020-2023  润新知