Как распознать ввод CTRL + C и клавиш F3 в flex - PullRequest
2 голосов
/ 11 июля 2011

Я пытаюсь реализовать функцию поиска в моем приложении, и для этого я пытаюсь открыть всплывающее окно поиска на основе клавиатурных вводов, таких как F3 или CTRL + F. Но на F3 вместо перехода к прослушивателю событий он открываетвместо этого найдите панель инструментов поиска в Internet Explorer.Любые подсказки, как я могу обойти это и использовать f3 в моем приложении?

Другое дело, как мне захватить CTRL + F в flex?

private function keyPressed(evt:KeyboardEvent):void
{
    if (evt.keyCode == Keyboard.F3)
    {
        //open popup
    } else {
        //do something elese
    }
}

Спасибо.

Ответы [ 3 ]

3 голосов
/ 11 июля 2011

Для обнаружения CTRL + F:

event.ctrlKey == true && event.keyCode == Keyboard.F

, где 'событие' - это, конечно, KeyBoardEvent.

Что касается вопроса F3: написанный вами код будет работать до тех пор, покаФлэш-приложение имеет фокус.Команда клавиши F3 также не будет перенаправлена ​​в браузер.Итак, что вам нужно сделать, это убедиться, что ваше приложение имеет фокус, когда пользователь нажимает F3.Как вы решите это, будет зависеть от вашей реализации JavaScript.Вы можете использовать ExternalInterface, чтобы сообщить браузеру, что приложение готово, а затем сфокусироваться на нем.Или в Javascript вы можете перехватить событие клавиатуры, предотвратить его поведение по умолчанию, а затем вызвать функцию в приложении Flash (снова через ExternalInterface).

Для начала, вот небольшой фрагмент JQuery для предотвращения по умолчаниюF3 поведение:

$('body').keyup(function(event) {
    if (event.keyCode == '114') event.preventDefault();
}
1 голос
/ 11 июля 2011

Это ответ на ваш второй вопрос, который, кстати, вероятно, следует задать в совершенно отдельном вопросе.

Это решение позволит вам протестировать столько комбинаций клавиш, сколько вам нужно.Он сохраняет нажатые клавиши в массиве и тестирует массив для определения комбинаций.

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class MultiKeyHandlerApp extends Sprite
    {
        protected var keyCodes:Array;

        public function MultiKeyHandlerApp()
        {
            keyCodes = [];
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandler );
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpHandler );
        }

        protected function onKeyDownHandler( event:KeyboardEvent ):void 
        {
            addKey( event.keyCode );    

                    // -- 65 = a, 83 = s, 68 = d
            if( hasKey( 65 ) && hasKey( 83 ) && hasKey( 68 ) )
            {
                trace( "match!" );  
            }
        }

        protected function onKeyUpHandler( event:KeyboardEvent ):void 
        {
            removeKey( event.keyCode );
        }

        protected function addKey( keyCode:int ):void 
        {
            if( keyCodes.indexOf( keyCode ) < 0 ) keyCodes.push( keyCode );
        }

        protected function removeKey( keyCode:int ):void 
        {
            var index:int = keyCodes.indexOf( keyCode );
            if( index > -1 ) keyCodes.splice( index, 1 );
        }

        protected function hasKey( keyCode:int ):Boolean 
        {
            return keyCodes.indexOf( keyCode ) >= 0;
        }
    }
}
0 голосов
/ 11 июля 2011

Только что проверил во всех браузерах (все обновлены).с 10,3 флэш-плеера.

Все работает на Chrome / FireFox / Opera.Главное, что вам нужно сделать, это убедиться, что вы сосредоточены на флэш-фильме (swf), а не на браузере (HTML) или еще где-то.

Поскольку IE использует технологию ActiveX, онсначала перехватывает все события функциональных клавиш, а затем анализирует их во Flash.

То же самое в сафари.

Но вы можете использовать F2, F8 и F9 во всех браузерах.

И для получения комбинации ctrl / alt / shift.

KeyboardEvent имеет несколько приятных свойств: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/KeyboardEvent.html#propertySummary

...