判断Event.COMPLETE是否已在Flex中为<img/>触发的最佳方法

时间:2008-10-19 09:28:14

标签: flex actionscript-3 image

我正在寻找判断<mx:Image>是否已经触发'Event.COMPLETE'事件的最佳方法。如果它已经显示我想做某事,或者如果它还没有附加事件处理程序。

类似的东西:

if (newBackground.percentLoaded < 100) 

if (newBackground.content != null)

我最初正在做newBackground.content != null,但这有一些跨域问题,因为沙箱不会让我显然访问内容!

在遇到可能的竞争条件时,我甚至有点厌倦使用percentLoaded < 100

是的我熟悉showEffect,但这不是我想要的。

4 个答案:

答案 0 :(得分:1)

我假设你出于某种原因无法在开始加载之前将Event.COMPLETE事件监听器附加到Image。如果是这种情况,您可以始终将mx.controls.Image子类化,并添加最初为"loadingCompleted"的属性"complete"false,但在true时设置为Event.COMPLETE {{1}}事件第一次触发。

答案 1 :(得分:1)

AS3中的加载器永远不会出现竞争条件,因为API的那部分不是多线程的。只需在加载开始之前添加您的事件监听器,您就可以了。如果您正在使用MXML,那么这一切都将为您完成。

如果您无法控制Image控件,那么最佳做法是比较bytesLoaded和bytesTotal。

// this will not race  
if (myImage.bytesLoaded < myImage.bytesTotal)  
{  
  myImage.addEventListener(Event.COMPLETE, handleImageComplete);  
}  
else  
{  
  // it's already done, do whatever you need to with it...  
}

答案 2 :(得分:0)

您没有订阅完整活动吗?还是进步事件?你在使用装载机吗?我相信在flex中你可以在图像的标记中附加事件处理程序,至少是完成和进度。 Progress将为您提供totalBytes和bytesLoaded。

干杯,  安德鲁

答案 3 :(得分:0)

使用事件是最好的方法。如果您有一个事件不能执行操作的方案,则可以监视图像控件的contentWidth和contentHeight属性。根据文档,“您可以在触发updateComplete事件后获取值。”在加载之前,该值为NaN。一旦内容加载,它就会变成一个数字。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Image.html