Захват действий клавиатурыFlash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий Экранные объекты, которые наследуют модели взаимодействия от класса InteractiveObject, могут реагировать на события клавиатуры. Для этого используются прослушиватели событий. Например, можно поместить прослушиватель событий в рабочую область для прослушивания действий клавиатуры и реагирования на них. Ниже приведен код, в котором прослушиватель событий захватывает нажатие клавиши, и отображаются название и код клавиши: function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
Некоторые клавиши, например Ctrl, генерируют события даже несмотря на то, что им не соответствуют никакие глифы. В предыдущем примере прослушиватель событий захватывает действия клавиатуры во всей рабочей области. Вы также можете написать прослушиватель событий для конкретного экранного объекта в рабочей области. Этот прослушиватель событий будет вызываться, когда фокус перейдет к объекту. В примере ниже нажатия клавиш отображаются на панели «Вывод» только тогда, когда они совершаются внутри экземпляра TextField. Удерживание клавиши Shift временно меняет цвет рамки объекта TextField на красный. В данном коде в рабочей области присутствует экземпляр TextField с именем tf. 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;
}
}
Класс TextField также реагирует на событие textInput, которое можно прослушивать при вводе пользователем текста. Дополнительную информацию см. в разделе Захват введенного текста. Примечание. В среде выполнения AIR события клавиатуры можно отменять. В среде Flash Player события клавиатуры отменять нельзя.
Коды клавиш и символовДля определения того, какая клавиша нажимается, и выполнения соответствующих действий используются свойства keyCode и charCode события клавиатуры. Свойство keyCode — это числовое значение, соответствующее значению клавиши на клавиатуре. Свойство charCode — это числовое значение данной клавиши в текущей раскладке клавиатуры. (Набор символов по умолчанию — UTF-8 с поддержкой ASCII.) Основная разница между кодом клавиши и кодом символа в том, что значение кода клавиши представляет конкретную клавишу на клавиатуре («1» на боковой клавиатуре отличается от «1» в верхнем ряду, но клавиша, с помощью которой вводятся «1» и «!», одна и та же), а значение кода символа — это конкретный символ («R» и «r» — разные символы). Примечание. Соответствия между клавишами и кодами их символов в ASCII см. в описании класса flash.ui.Keyboard в cправочнике ActionScript® 3.0 для платформы Adobe® Flash® Platform.
Связь клавиш с кодами клавиш зависит от устройства и операционной системы. По этой причине не следует использовать назначения клавиш для вызова действий. Вместо этого лучше использовать предопределенные значения констант класса Keyboard для ссылки на нужные свойства keyCode. Например, вместо того чтобы использовать «горячую» клавишу Shift, используйте константу Keyboard.SHIFT (как показано в предыдущем примере). Приоритет событий KeyboardEventКак и в случае с другими событиями, последовательность событий клавиатуры определяется иерархией экранных объектов, а не порядком, в котором методы addEventListener() назначаются в коде. Предположим, вы поместили текстовое поле tf во фрагмент ролика с именем container и добавили прослушиватель событий для событий клавиатуры к обоим экземплярам: 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 + ")");
}
Так как прослушиватель установлен и на текстовое поле, и на его родительский контейнер, функция reportKeyDown() вызывается дважды для каждого нажатия клавиши в текстовом поле TextField. Обратите внимание, что каждый раз при нажатии клавиши текстовое поле отправляет событие прежде, чем это делает фрагмент ролика container. Операционная система и веб-обозреватель обрабатывают события прежде, чем это делает проигрыватель Adobe Flash Player или AIR. Например, если нажать в обозревателе Internet Explorer сочетание клавиш Ctrl+W, окно обозревателя закроется прежде, чем любой из содержащихся в нем SWF-файлов отправит событие клавиатуры. |
|