`

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

阅读更多

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

  1. package
  2. {
  3.         import flash.display.Sprite;
  4.         import flash.events.Event;

  5.         public class Test extends Sprite
  6.         {
  7.                 public function Test()
  8.                 {
  9.                         if(stage)
  10.                         {
  11.                                 init(null);
  12.                         }
  13.                         else
  14.                         {
  15.                                 addEventListener(Event.ADDED_TO_STAGE, init);
  16.                         }
  17.                 }

  18.                 private function init(event:Event):void
  19.                 {
  20.                         stage.align = StageAlign.TOP_LEFT;
  21.                         stage.scaleMode = StageScaleMode.NO_SCALE;
  22.                         //应用初始化时的脚本放在该方法下
  23.                         trace(stage.stageWidth, stage.stageHeight);
  24.                 }
  25.         }
  26. }
复制代码
该脚本在火狐下可以正常取得flash舞台的尺寸,可是在ie中却只会都返回0,不过我们在过几秒后再访问这个尺寸是就会正常,这说明在ie中,窗口第一次改变大小时是在我们的init方法之后的,该怎么解决呢,我们可以侦听Event.RESIZE事件,在舞台尺寸都不为0后再调用init方法即可,实现有点繁琐,所以小可这就奉上自己写的脚本了:
  1. package
  2. {
  3.         import flash.display.Sprite;
  4.         import flash.display.StageAlign;
  5.         import flash.display.StageScaleMode;
  6.         import flash.events.Event;
  7.         
  8.         public class StageTest extends Sprite
  9.         {
  10.                 public function StageTest()
  11.                 {
  12.                         if(stage)
  13.                         {
  14.                                 resizeListaner(null);
  15.                         }
  16.                         else
  17.                         {
  18.                                 addEventListener(Event.ADDED_TO_STAGE, resizeListaner);
  19.                         }
  20.                 }
  21.                 
  22.                 private function resizeListaner(event:Event):void
  23.                 {
  24.                         if(event != null)
  25.                         {
  26.                                 removeEventListener(Event.ADDED_TO_STAGE, resizeListaner);
  27.                         }
  28.                         //限制 flash 的尺寸不进行拉伸, 否则不会触发 resize 事件
  29.                         stage.align = StageAlign.TOP_LEFT;
  30.                         stage.scaleMode = StageScaleMode.NO_SCALE;
  31.                         if(stage.stageWidth == 0 || stage.stageHeight == 0)
  32.                         {
  33.                                 stage.addEventListener(Event.RESIZE, resizeHandler);
  34.                         }
  35.                         else
  36.                         {
  37.                                 init();
  38.                         }
  39.                 }
  40.                 
  41.                 private function resizeHandler(event:Event):void
  42.                 {
  43.                         if(stage.stageWidth > 0 && stage.stageHeight > 0)
  44.                         {
  45.                                 stage.removeEventListener(Event.RESIZE, resizeHandler);
  46.                                 init();
  47.                         }
  48.                 }
  49.                 
  50.                 private function init():void
  51.                 {
  52.                         //应用初始化时的脚本放在该方法下
  53.                         trace(stage.stageWidth, stage.stageHeight);
  54.                 }
  55.         }
  56. }
复制代码
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics