Samla in tangentbordsindata

Flash Player 9 och senare, Adobe AIR 1.0 och senare

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).

Obs! Mer information om mappningen mellan tangenter och deras teckenkodvärden i ASCII finns i avsnittet för klassen flash.ui.Keyboard i Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen .

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.