Flex编程注意之自动获取焦点、监听全局键盘事件

需求如下:
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;

片段代码如下:

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

之所以用timer来处理是因为当create complete后,直接使用
dispatchEvent会发现stage尚未赋值,因此需要延时一段时间处理。
注意:以上代码适用于
AIR,在Flex里面按照如下写法仍旧无法获取KeyboardEvent
.KEY_DOWN event。

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

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

解决方法:
在嵌入
SWF
的html里面加入如下的功能:
<body οnlοad="document.getElementById('swf id').focus()">
这句话的含义:
当onload完毕后,自动设定SWF为焦点状态。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值