首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

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

2012-09-02 
[心得] 完美解决as3在ie中初始化时stageWidth和stageHeight为0的问题先看下面的一段脚本,这是比较经典的初

[心得] 完美解决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. }
复制代码

热点排行