我想通过键盘导航更方便地使用基于Flash AS3的应用程序。
添加到每个MovieClip的最佳方法是MouseEvent.CLICK
能够通过TAB
和点击/解雇通过ENTER
来选择?
我的代码的一些基本示例:
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函数,如果使用TAB选择了MovieClip,则启用带有MouseEvent的每个MovieClip都可以通过ENTER激活。我不能记住这个功能。
答案 0 :(得分:1)
我认为问题可能是您使用MovieClip
而不是按钮(Button
或SimpleButton
)尝试此操作。
我通过在我的库中创建按钮而不是MovieClip进行了一个简单的测试,这按预期工作:
// 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键。
修改强>
要回答评论中提出的问题,这是一种快速而肮脏的方式来转换&#34; MovieClips到运行时的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;
}