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"?>


<![CDATA[
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;
// }
}

]]>


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章