zoukankan      html  css  js  c++  java
  • 完美解决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);
                    }
            }
    }
    

      

     

     

  • 相关阅读:
    linux系统安装Mysql
    makefile通用模板
    makefile常用函数
    mysqlconnector安装
    linux添加默认路由route
    .h文件与.hpp文件的区别
    ubuntu20优化开机启动
    [javascript]js原型链以及原型链继承
    webpack4.*入门笔记
    图像编程:图片大小关系
  • 原文地址:https://www.cnblogs.com/autumndawn/p/2617787.html
Copyright © 2011-2022 走看看