2014-03-26 61 views
0

我想通過鍵盤導航使我的基於Flash AS3的應用更易於訪問。 什麼是最好的方式添加到每個影片剪輯與MouseEvent.CLICK能夠獲得通過TAB點擊/解僱通過ENTER選定的能力?如何將鍵盤導航添加到基於Flash AS3的應用程序?

我的代碼一些基本的例子:

nav.btna.addEventListener(MouseEvent.CLICK, openSection); 
dialog.btnx.addEventListener(MouseEvent.CLICK, closeDialog); 

function openSection(event:Event=null):void 
{ 
    trace("nav.btna") 
} 

function closeDialog(event:Event=null):void 
{ 
    trace("dialog.btnx") 
} 

我記得有一個AS3功能開啓,每一個影片剪輯用的MouseEvent可能是,如果了MovieClip用TAB選擇燒穿ENTER鍵。雖然我不記得這個功能。

回答

1

我認爲問題可能是您正在嘗試使用MovieClip而不是按鈕(ButtonSimpleButton)。

我在我的圖書館創建一個按鈕,而不是影片剪輯做了一個簡單的測試,這和預期一樣:

// I have 4 buttons (button1, button2, etc) on the stage 
for(var i:int = 1; i <= 4; i++) 
{ 
    var mc = getChildByName("button" + (i+1)); 
    mc.tabIndex = i; 
    mc.addEventListener(MouseEvent.CLICK, onClicked); 
} 

function onClicked(e:MouseEvent):void 
{ 
    trace(e.currentTarget + " clicked"); 
} 

stage.focus = stage; 

我最初運行該測試MovieClip情況下,雖然他們會表明選項卡是工作(黃色邊框出現),MouseEvent.CLICK從未開火。一旦我切換到實際按鈕(在這種情況下爲SimpleButton),它同時使用Enter鍵和Space鍵。

編輯:

要回答在評論中提出的問題,這是一個快速和骯髒的方式「轉換」影片剪輯到SimpleButtons在運行時:

// I have 4 MovieClips (button1, button2, etc) on the stage 
for(var i:int = 1; i <= 4; i++) 
{ 
    var mc:MovieClip = getChildByName("button" + i) as MovieClip; 
    var button:SimpleButton = convertMovieClipToButton(mc); 
    button.tabIndex = i; 
    button.addEventListener(MouseEvent.CLICK, onClicked); 
} 

function convertMovieClipToButton(mc:MovieClip):SimpleButton 
{ 
    var className:Class = getDefinitionByName(getQualifiedClassName(mc)) as Class; 
    var button:SimpleButton = new SimpleButton(new className(), new className(), new className(), new className()); 
    button.name = mc.name; 
    button.x = mc.x; 
    button.y = mc.y; 
    mc.parent.addChildAt(button, getChildIndex(mc)); 
    mc.parent.removeChild(mc); 
    return button; 
} 
+0

好極了,謝謝!有沒有辦法在運行時將MovieClip更改爲Buttons/SimpleButtons? – Tom

相關問題