Flex 自动获取焦点 监听全局键盘事件                
                
                    所属分类:
                        网页制作 / Flash                    
                    阅读数:
                        957
                    
                        收藏 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脚本编写的计时器效果,代码简单易懂,需要的朋友参考下吧
                    
                    收藏 0赞 0分享
flashas菜鸟入门教程下载第1/2页
这个教程很老了,是闪吧的 thymecd 发布的 ,由blackhill  整理成chm 图片和 swf都是全的!! 闪吧的下载已经失效了,所以我在网上找了很久总算找了一个下载地址 下面是第三章的内容 很适合刚刚接触as的朋友
                    
                    收藏 0赞 0分享
ActionScript 3.0 编程体验
日前,Adobe公司发布了Flash的最新版本Flash Professional 9 ActionScript 3.0 Preview,这是Flash 9的预览版,正式版本估计要到2007年才会推出,
                    
                    收藏 0赞 0分享
As3.0 xml + Loader应用代码
简单说说AS3.0中对于XML支持的不同吧: 
.AS2.0对XML的支持勉勉强强,将就着可以用。而AS3.0中对XML的支持是全方位的,极其强大和灵活的
                    
                    收藏 0赞 0分享
                 查看更多