完美解决as3在ie中初始化时stageWidth和stageHeight为0的问题

先看下面的一段脚本,这是比较经典的初始化脚本:

package
{
        import flash.display.Sprite;
        import flash.events.Event;

        public class Test extends Sprite
        {
                public function Test()
                {
                        if(stage)
                        {
                                init(null);
                        }
                        else
                        {
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }
                }

                private function init(event:Event):void
                {
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        //应用初始化时的脚本放在该方法下
                        trace(stage.stageWidth, stage.stageHeight);
                }
        }
}

     该脚本在火狐下可以正常取得flash舞台的尺寸,可是在ie中却只会都返回0,不过我们在过几秒后再访问这个尺寸是就会正常,这说明在ie中,窗口第一次改变大小时是在我们的init方法之后的,该怎么解决呢,我们可以侦听Event.RESIZE事件,在舞台尺寸都不为0后再调用init方法即可,实现有点繁琐:

package
{
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        
        public class StageTest extends Sprite
        {
                public function StageTest()
                {
                        if(stage)
                        {
                                resizeListaner(null);
                        }
                        else
                        {
                                addEventListener(Event.ADDED_TO_STAGE, resizeListaner);
                        }
                }
                
                private function resizeListaner(event:Event):void
                {
                        if(event != null)
                        {
                                removeEventListener(Event.ADDED_TO_STAGE, resizeListaner);
                        }
                        //限制 flash 的尺寸不进行拉伸, 否则不会触发 resize 事件
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        if(stage.stageWidth == 0 || stage.stageHeight == 0)
                        {
                                stage.addEventListener(Event.RESIZE, resizeHandler);
                        }
                        else
                        {
                                init();
                        }
                }
                
                private function resizeHandler(event:Event):void
                {
                        if(stage.stageWidth > 0 && stage.stageHeight > 0)
                        {
                                stage.removeEventListener(Event.RESIZE, resizeHandler);
                                init();
                        }
                }
                
                private function init():void
                {
                        //应用初始化时的脚本放在该方法下
                        trace(stage.stageWidth, stage.stageHeight);
                }
        }
}

  

 

 

转载于:https://www.cnblogs.com/autumndawn/archive/2012/08/01/2617787.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值