Flex 自动获取焦点 监听全局键盘事件_Flash教程-查字典教程网
Flex 自动获取焦点 监听全局键盘事件
Flex 自动获取焦点 监听全局键盘事件
发布时间:2016-12-28 来源:查字典编辑
摘要:这是《Flex第一步》QQ群里面一个朋友问我的问题,特此拿出分享一下。或许问题比较简单,还是将其记录一下比较好。需求如下:当AIR启动后,监...

这是《Flex第一步》QQ群里面一个朋友问我的问题,特此拿出分享一下。或许问题比较简单,还是将其记录一下比较好。

需求如下:

当AIR启动后,监听全局键盘事件,即this.addEventListener( KeyboardEvent.KEY_DOWN, keydownHandler );

运行后效果:

当AIR运行后,虽然正确监听了KeyboardEvent.KEY_DOWN event,但是必须要鼠标点击一下AIR才可以获取keydownHandler。

原因:

1、keydownHandler的获取需要监听的对象获得焦点,当mouse click AIR后,则相当于获取焦点。

2、只有当监听的对象获取焦点后,才能出接收到KeyboardEvent.KEY_DOWN event。

因此问题根结:

如何让监听对象自动获取焦点。

解决方案:(步骤)

1、

this.dispatchEvent( new MouseEvent( MouseEvent.CLICK ));

通过以上的方式即可让程序“自动点击”dispatchEvent的对象。

2、

获取焦点方式:

this.stage.focus = this;

<s:WindowedApplication

xmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/halo"

creationComplete="createCompleteHandler (event)">

private function createCompleteHandler( event : FlexEvent ) : void {

//监听ouseEvent.CLICK event

this.addEventListener( MouseEvent.CLICK, clickHandler );

//监听KeyboardEvent.KEY_DOWN

this.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );

}

private function clickHandler( event : MouseEvent ) : void {

this.stage.focus = this;

}

private function keyDownHandler( event : KeyboardEvent ) : void {

//TO DO

}

自动触发mouse click的代码:(以下代码在this.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );的下面)

var timer : Timer = new Timer( 100, 1 );

timer.addEventListener( TimerEvent.TIMER_COMPLETE, function ( event : TimerEvent ) : void {

event.target.stop();

dispatchEvent( new MouseEvent( MouseEvent.CLICK ));

});

timer.start();

之所以用timer来处理是因为当create complete后,直接使用dispatchEvent会发现stage尚未赋值,因此需要延时一段时间处理。

注意:以上代码适用于AIR,在Flex里面按照如下写法仍旧无法获取KeyboardEvent.KEY_DOWN event。

Flex里面是如何自动获取焦点、监听全局键盘事件的呢?

原因:

Flex由于有浏览器的包裹,因此当打开浏览器后,由于SWF尚未获取焦点,因此就算自动获取了焦点(dispatchEvent( new MouseEvent( MouseEvent.CLICK ));)也是没有意义的。

解决方法:

在嵌入SWF的html里面加入如下的功能:

<body onload="document.getElementById('swf id').focus()">

这句话的含义:当onload完毕后,自动设定SWF为焦点状态。

最后再按照AIR的写即可完成自动获取焦点、监听全局键盘事件。

由于代码比较少,因此就不放上demo了,以上的片段代码足以说明问题:)

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Flash教程学习
    热门Flash教程学习
    网页设计子分类