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

所属分类: 网页制作 / Flash 阅读数: 937
收藏 0 赞 0 分享
这是《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了,以上的片段代码足以说明问题:)
更多精彩内容其他人还在看

AS3中的反射(速记) 分析

详细了解AS3的反射,请google相关文章,这里只是速记一下
收藏 0 赞 0 分享

flash与asp/php/asp.net通信的方法第1/3页

flash与后台程序通信
收藏 0 赞 0 分享

火山动态文本滚动条V5[AS3版]

功能说明:本版滚动条除了继续保持体积小(小于2K),界面容易修改,资源占用率小的优势外,主要有以下几点改进: 1,使用AS3编写。 2,宽高动态指定。 3,增加滚动条背景点击事件。 4,消除了鼠标滚轮无法同时准确控制多个文本框的重大BUG。
收藏 0 赞 0 分享

AS打造的复制粘贴等功能类

真不错漂亮大方的flash复制粘贴剪切等效果
收藏 0 赞 0 分享

关于类、私有属性与继承的理解

学习FLASH的时间也不短了,但总觉得还有很多的东西在等我去弄清楚。而且有很多东西也是搞得似懂非懂。在这里,把类、私有属性跟继承的理解讲一下。也希望大家能无私补充,以臻佳景。
收藏 0 赞 0 分享

FLASH自动判断域名然后转向等操作

FLASH自动判断域名,如果不是你的域名,然后干什么你来定吧! 首先说一下FLASH自已可以干什么!FLASH他可以判断自已在哪个路径下面,例如:
收藏 0 赞 0 分享

Flex程序开发心得小结

和Flash的开发环境相比,Flex提供的组件库确实很诱人,但由于功能太全面,导致程序的体积大,有时候使用不当,可能会影响程序运行效率。
收藏 0 赞 0 分享

关于FLASH与XML交互应用中的理解

关于XML在FLASH中的应用,以前写过几篇。也收集了几篇来自网络的。不过,都是一些非常简单而常用的。在这里,我把XML的其他相关说明总结一下。有不足之处,希望大家能相互补充。只为了一个共同的目的:共同提高。
收藏 0 赞 0 分享

Flash Event写法

flash下event事件驱动方法
收藏 0 赞 0 分享

AS3自写类整理笔记 ClassLoader类第1/2页

在用flash做项目的时候,把一些元件,通过设置链接类,然后使用这个类,通过getClass方法即可把这个素材拿下来
收藏 0 赞 0 分享
查看更多