Visningsobjekt som ärver interaktionsmodellen från klassen InteractiveObject kan använda händelseavlyssnare för att svara på tangentbordshändelser. Du kan exempelvis placera en händelseavlyssnare på scenen för att lyssna och svara på tangentbordsinmatningar. I följande exempel samlar en händelseavlyssnare in en tangentnedtryckning och sedan visas tangentnamnet och egenskaperna för tangentkoden:
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
Vissa tangenter, till exempel Ctrl-tangenten, genererar händelser trots att den inte har någon glyfrepresentation.
I det föregående exemplet samlar tangentbordsavlyssnaren in tangentbordsinmatningar för hela scenen. Du kan också skriva en händelseavlyssnare för ett specifikt visningsobjekt på scenen. Den här händelseavlyssnaren aktiveras när objektet är i fokus.
I följande exempel återspeglas tangentnedtryckningar i utdatapanelen bara när användaren skriver något i TextField-instansen. När du håller ned skifttangenten ändras textfältets ramfärg temporärt till rött.
För koden görs antagandet att det redan finns en TextField-instans med namnet
tf
på scenen.
tf.border = true;
tf.type = "input";
tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp);
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")");
if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000;
}
function reportKeyUp(event:KeyboardEvent):void
{
trace("Key Released: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")");
if (event.keyCode == Keyboard.SHIFT)
{
tf.borderColor = 0x000000;
}
}
Klassen TextField rapporterar också en
textInput
-händelse som du kan avlyssna när användaren skriver text. Mer information finns i
Hämta textinmatningar
.
Obs!
I AIR-miljön kan en tangentbordshändelse avbrytas. I Flash Player-miljön kan en tangentbordshändelse inte avbrytas.
Tangentkoder och teckenkoder
Med egenskaperna
keyCode
och
charCode
kan du ta reda på vilken tangent som trycks ned och därefter aktivera olika åtgärder. Egenskapen
keyCode
är ett numeriskt värde som motsvarar värdet på tangenten på tangentbordet. Egenskapen
charCode
är ett numeriskt värde för tangenten i den aktuella teckenuppsättningen. (Standardteckenuppsättningen är UTF-8, som har stöd för ASCII.)
Den största skillnaden mellan tangentkoder och teckenvärden är att ett tangentkodsvärde representerar en viss tangent på tangentbordet (tangenten ”1” på ett numeriskt tangentbord är inte densamma som ”1” på den översta raden på tangentbordet, men själva tangenten som genererar ”1” och tangenten som genererar ”!” är densamma) och att teckenvärdet representerar ett speciellt tecken (tecken ”R” och ”r” är olika).
Mappningen mellan tangenter och deras tangentkoder beror på den aktuella enheten och operativsystemet. Du ska därför inte använda tangentmappning för att aktivera åtgärder. Du ska i stället använda de fördefinierade konstanterna i klassen Keyboard för att referera till rätt
keyCode
-egenskap. I stället för att exempelvis använda tangentmappning för skifttangenten ska du använda konstanten
Keyboard.SHIFT
(vilket framgår av exemplet nedan).
Prioritet för tangentbordshändelser
Precis som för andra händelser bestäms tangentbordshändelsen av visningsobjektshierarkin och inte av i vilken ordning metoderna för
addEventListener()
är tilldelade i koden.
I nästa exempel placerar du ett textfält med namnet
tf
i ett filmklipp med namnet
container
och lägger till en händelseavlyssnare för en tangentbordshändelse i båda instanserna:
container.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
container.tf.border = true;
container.tf.type = "input";
container.tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
function reportKeyDown(event:KeyboardEvent):void
{
trace(event.currentTarget.name + " hears key press: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")");
}
Eftersom det finns en avlyssnare i båda textfälten och i dess överordnade behållare, anropas funktionen
reportKeyDown()
två gånger för varje tangentnedtryckning i TextField. Observera, att för varje tangentnedtryckning skickas en händelse från textfältet innan filmklippet
container
skickar en händelse.
Tangentbordshändelsen bearbetas i operativsystemet och webbläsaren innan den bearbetas i Adobe Flash Player eller AIR. Om du i exempelvis Microsoft Internet Explorer trycker på Ctrl+W stängs webbläsarfönstret innan en eventuell SWF-fil skickar en tangentbordshändelse.