源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-05-13 18:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Flex 自动获取焦点 监听全局键盘事件
这是《Flex第一步》QQ群里面一个朋友问我的问题,特此拿出分享一下。或许问题比较简单,还是将其记录一下比较好。 [b]需求如下: [/b]当AIR启动后,监听全局键盘事件,即this.addEventListener( KeyboardEvent.KEY_DOWN, keydownHandler ); [b]运行后效果:[/b] 当AIR运行后,虽然正确监听了KeyboardEvent.KEY_DOWN event,但是必须要鼠标点击一下AIR才可以获取keydownHandler。 原因: 1、keydownHandler的获取需要监听的对象获得焦点,当mouse click AIR后,则相当于获取焦点。 2、只有当监听的对象获取焦点后,才能出接收到KeyboardEvent.KEY_DOWN event。 因此问题根结: 如何让监听对象自动获取焦点。 [b]解决方案:(步骤) [/b]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了,以上的片段代码足以说明问题:)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部