我正在寻找判断<mx:Image>
是否已经触发'Event.COMPLETE'事件的最佳方法。如果它已经显示我想做某事,或者如果它还没有附加事件处理程序。
类似的东西:
if (newBackground.percentLoaded < 100)
或
if (newBackground.content != null)
我最初正在做newBackground.content != null
,但这有一些跨域问题,因为沙箱不会让我显然访问内容!
在遇到可能的竞争条件时,我甚至有点厌倦使用percentLoaded < 100
。
是的我熟悉showEffect
,但这不是我想要的。
答案 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