加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 自动获取焦点 监听全局键盘事件

发布时间:2020-12-15 01:40:13 所属栏目:百科 来源:网络整理
导读:Flex 编程注意之自动获取焦点、监听全局键盘事件 这是《Flex第一步》QQ群里面一个朋友问我的问题,特此拿出分享一下。或许问题比较简单,还是将其记录一下比较好。? 需求如下:? 当AIR启动后,监听全局键盘事件,即this.addEventListener( KeyboardEvent.KEY

Flex 编程注意之自动获取焦点、监听全局键盘事件
这是《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了,以上的片段代码足以说明问题:)

?

来源:http://www.aspzz.cn/article/19103.htm

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读