正确访问SWFLoader下载完了的元素属性
2006-10-17 01:42
204 查看
flex里有个SWFLoader,真是方便群众啊,不过在下载完了后,处理时有个注意点
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function handlePicture(evt:Event):void
{
try
{
var img:Image = Image(evt.target);
var s:String = ">>image: " + img + '/n';
s += "/twidth: " + img.width + '/n';
s += "/theight: " + img.height + '/n';
s += "/tcontent: " + img.content + '/n';
s += "/tcontentWidth: " + img.contentWidth + '/n'
s += "/tcontentHeight: " + img.contentHeight + '/n';
Alert.show(s);
}
catch(e:Error)
{
Alert.show(e.toString());
}
}
]]>
</mx:Script>
<mx:Image id="my_image" source="test.jpg" complete="handlePicture(event);" />
</mx:Application>
以上代码非常简单,Image是继承SWFLoader的,针对图像,在这里和SWFLoader是一样的.
注意广播事件,用的是complete.熟悉的人应该知道complete和init的差异.
下载内容是图片的话,complete和init是没啥区别的.
好了,那么有什么要注意的么?
如果copy上面程序,编译运行一下的话,就会看到,img的width和height是0,而contentWidth和contentHeight是有值的.
这是因为contentWidth和contentHeight,顾名思义,就是content.width和content.height,而content指的是下载好了的Bitmap对象,当然它的属性是有值的.
而SWFLoader,在下载好后,因为要进行整个样式,尺寸等方面的改变,所以使用了一系列invalidate,而这些是基于callLater的.
关于callLater,可以简单的认为是,把现有要执行的代码,在这一帧的最后执行.
详细的看这里
所以如果在下载完了,马上去访问img的width和height,取到的是不正确的
contentWidth和contentHeight这两个属性在手册上是有提起的.
可以看这里
了解了这点就可以继续工作了,如果非要等img也完全赋值了才进行,可以通过下面这个比较bt的方法
<mx:Image id="my_image" source="test.jpg" complete="callLater(callLater, [handlePicture,[event]]);" />
呵呵,通过两个callLater,把handlePicture放到比invalidate还后面执行,这样就可以了
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function handlePicture(evt:Event):void
{
try
{
var img:Image = Image(evt.target);
var s:String = ">>image: " + img + '/n';
s += "/twidth: " + img.width + '/n';
s += "/theight: " + img.height + '/n';
s += "/tcontent: " + img.content + '/n';
s += "/tcontentWidth: " + img.contentWidth + '/n'
s += "/tcontentHeight: " + img.contentHeight + '/n';
Alert.show(s);
}
catch(e:Error)
{
Alert.show(e.toString());
}
}
]]>
</mx:Script>
<mx:Image id="my_image" source="test.jpg" complete="handlePicture(event);" />
</mx:Application>
以上代码非常简单,Image是继承SWFLoader的,针对图像,在这里和SWFLoader是一样的.
注意广播事件,用的是complete.熟悉的人应该知道complete和init的差异.
下载内容是图片的话,complete和init是没啥区别的.
好了,那么有什么要注意的么?
如果copy上面程序,编译运行一下的话,就会看到,img的width和height是0,而contentWidth和contentHeight是有值的.
这是因为contentWidth和contentHeight,顾名思义,就是content.width和content.height,而content指的是下载好了的Bitmap对象,当然它的属性是有值的.
而SWFLoader,在下载好后,因为要进行整个样式,尺寸等方面的改变,所以使用了一系列invalidate,而这些是基于callLater的.
关于callLater,可以简单的认为是,把现有要执行的代码,在这一帧的最后执行.
详细的看这里
所以如果在下载完了,马上去访问img的width和height,取到的是不正确的
contentWidth和contentHeight这两个属性在手册上是有提起的.
可以看这里
了解了这点就可以继续工作了,如果非要等img也完全赋值了才进行,可以通过下面这个比较bt的方法
<mx:Image id="my_image" source="test.jpg" complete="callLater(callLater, [handlePicture,[event]]);" />
呵呵,通过两个callLater,把handlePicture放到比invalidate还后面执行,这样就可以了
相关文章推荐
- 正确访问SWFLoader下载完了的元素属性
- PHP的SimpleXML访问特定节点元素和属性
- [代码]访问内存中的XML元素和元素属性(LINQ to XML)
- as3之访问XML元素和属性
- 尝试向 URI“ ”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务...。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。
- 正确使用DOM--如何访问网页元素
- 访问元素CSS属性
- js小技巧之访问元素属性
- Action中元素的可访问属性的设置
- 验证元素属性是否正确的工具--xpath checker
- 如何用img标签的src属性去访问私有ftp上的图片,而不需要下载到本地
- CH22.P438.....直接对元素和属性访问;
- Qt -Ftp下载之修改文件属性(修改时间,访问时间)
- Python访问类的私有属性和私有方法的正确姿势
- 需要做特殊处理的DOM元素属性的访问
- 正确使用DOM--如何访问网页元素
- 【php基础班】第14天 DOM概述、节点的访问、随机显示星星、HTMLDOM简介和访问、元素对象属性、事件对象
- JavaScript:关于事件处理程序何时可以直接访问元素的属性
- DOM访问表格子元素的常用属性和方法