在as3中使用靜態方法,我可以從字符串中的字符獲得charCode。從字符串獲取keyCode?
如何從字符串中的字符獲取keyCode?我是否需要通過JavaScript運行此功能(如果我可以在Javascript中執行此操作...)
在as3中使用靜態方法,我可以從字符串中的字符獲得charCode。從字符串獲取keyCode?
如何從字符串中的字符獲取keyCode?我是否需要通過JavaScript運行此功能(如果我可以在Javascript中執行此操作...)
複製和粘貼爲 「KeyCodeUtil.as」,把它放在文件夾下:網/ onthewings/utils的
/*
KeyCodeUtil.as
Andy Li ([email protected])
2009-11-02
*/
package net.onthewings.utils {
import flash.ui.Keyboard;
public class KeyCodeUtil {
/*
The below codes is used for generating KEYCODES. Some formating is needed to be done by hand after getting the outputStr.
var outputStr:String = "";
function onPress(evt:KeyboardEvent):void {
outputStr += "'" + evt.charCode + "':" + evt.keyCode + ", //"+String.fromCharCode(evt.charCode)+"\n";
}
*/
static public const KEYCODES:Object = {
27: 27, //esc
96: 192, //`
49: 49, //1
50: 50, //2
51: 51, //3
52: 52, //4
53: 53, //5
54: 54, //6
55: 55, //7
56: 56, //8
57: 57, //9
48: 48, //0
45: 189, //-
61: 187, //=
8: 8, //backspace
9: 9, //tab
113: 81, //q
119: 87, //w
101: 69, //e
114: 82, //r
116: 84, //t
121: 89, //y
117: 85, //u
105: 73, //i
111: 79, //o
112: 80, //p
91: 219, //[
93: 221, //]
92: 220, //\
97: 65, //a
115: 83, //s
100: 68, //d
102: 70, //f
103: 71, //g
104: 72, //h
106: 74, //j
107: 75, //k
108: 76, //l
59: 186, //;
39: 222, //'
13: 13, //enter
122: 90, //z
120: 88, //x
99: 67, //c
118: 86, //v
98: 66, //b
110: 78, //n
109: 77, //m
44: 188, //,
46: 190, //.
47: 191, ///
32: 32, //space
127: 46, //delete
126: 192, //~
33: 49, //!
64: 50, //@
35: 51, //#
36: 52, //$
37: 53, //%
94: 54, //^
38: 55, //&
42: 56, //*
40: 57, //(
41: 48, //)
95: 189, //_
43: 187, //+
81: 81, //Q
87: 87, //W
69: 69, //E
82: 82, //R
84: 84, //T
89: 89, //Y
85: 85, //U
73: 73, //I
79: 79, //O
80: 80, //P
123: 219, //{
125: 221, //}
124: 220, //|
65: 65, //A
83: 83, //S
68: 68, //D
70: 70, //F
71: 71, //G
72: 72, //H
74: 74, //J
75: 75, //K
76: 76, //L
58: 186, //:
34: 222, //"
90: 90, //Z
88: 88, //X
67: 67, //C
86: 86, //V
66: 66, //B
78: 78, //N
77: 77, //M
60: 188, //<
62: 190, //>
63: 191 //?
}
/**
* @param char Can be String or charCode(Number).
* @param numpad If set to true, the function will return the keyCode for numpad. Ignored if numpad have no such key.
*/
static public function keyCodeOf(char:*, numpad:Boolean = false):Number {
var charCode:Number;
if (char is String)
charCode = (char as String).charCodeAt();
else
charCode = char;
if (numpad){
if (charCode >= 48 && charCode <= 57){ //0-9
return charCode + 48;
} else if (charCode == 43){
return Keyboard.NUMPAD_ADD;
} else if (charCode == 46){
return Keyboard.NUMPAD_DECIMAL;
} else if (charCode == 47){
return Keyboard.NUMPAD_DIVIDE;
} else if (charCode == 13){
return Keyboard.NUMPAD_ENTER;
} else if (charCode == 42){
return Keyboard.NUMPAD_MULTIPLY;
} else if (charCode == 45){
return Keyboard.NUMPAD_SUBTRACT;
}
}
return KEYCODES[charCode] ? KEYCODES[charCode] : -1;
}
}
}
爲什麼從字符串中獲取鍵碼?爲什麼不直接從KeyboardEvent得到它?
下面的示例代碼演示瞭如何處理和檢索KeyboardEvent
鍵碼的文檔中一個精簡版:
package {
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.events.*;
public class KeyboardEventExample extends Sprite {
private var child:Sprite = new Sprite();
private var bgColor:uint = 0x00CCFF;
private var size:uint = 80;
public function KeyboardEventExample() {
child.graphics.beginFill(bgColor);
child.graphics.drawRect(0, 0, size, size);
child.graphics.endFill();
addChild(child);
child.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
child.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
}
private function keyDownHandler(event:KeyboardEvent):void {
trace("keyDownHandler: " + event.keyCode);
}
private function keyUpHandler(event:KeyboardEvent):void {
trace("keyUpHandler: " + event.keyCode);
}
}
}
如果你真的有需要讀取一個字符串,聽到鍵盤不是一個選項(如Soviut所建議的那樣),那麼你將需要確保字符串被分隔一些方式,大多數情況下可能帶有逗號 - 因爲每個keyCode的字符數量不同,而某些keyCode是字符串其他人都是。
這裏是所有的鍵代碼常量列表:
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/ui/Keyboard.html
在Adobe AIR中使用此功能:
var str:String = "a"; //only one letter at a time
var keyCode:uint = Keyboard[str.toUpperCase()];
trace(keyCode);
我想我會加入一個很easy更高級的方法:
var str:String = "B";
trace(str.charCodeAt(0)); // replace 0 with the index of the char you want the code of
這將返回charCode,而不是keyCode – Tom 2012-02-29 12:33:54