zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Codeforces 691A Fashion in Berland
    HDU 5741 Helter Skelter
    HDU 5735 Born Slippy
    HDU 5739 Fantasia
    HDU 5738 Eureka
    HDU 5734 Acperience
    HDU 5742 It's All In The Mind
    POJ Euro Efficiency 1252
    AtCoder Beginner Contest 067 C
    AtCoder Beginner Contest 067 D
  • 原文地址:https://www.cnblogs.com/bmate/p/1868228.html
Copyright © 2011-2022 走看看