as2中加载图片控制(异步加载)
很多人出现flash加载外部图片而不能控制显示大小的问题,导致这样问题的原因其实是因为flash在加载图片是采用渐进式的方式,在图片没有加载完成的时候,flash是不知道你的图片的大小的和尺寸的属性的。所以你在程序中即时加入控制大小的代码也无法控制图片。因为代码往往在图片还没有加载完之前就执行了,也就是说你的代码是找不到执行的对象的。所以使用_width和_height代码是无效的。而_xscale和_yscale可以执行但是因为是按照百分比计算的,所以也不能控制不同大小的图片最后显示同样大小的尺寸。
解决办法:
loadClip代码,我想你应该也是知道的, loadClip代码就是解决这个问题的最佳人选了。loadMovie属于初级代码,它没有侦听器这样的属性,因此无法捕捉到文件的属性(大小,尺寸)。因此我们不推荐使用这个代码,如果你的flash只是用于本机播放的,不存在网络延迟那么也就无所谓的了,但是如果你要控制加载图片的大小,那么还是需要用loadClip即时你的flash是本地播放的,因为即时加载本地的图片,加载图片的时间肯定也是滞后于代码执行的,因此我们选用 loadClip代码,作为加载外部文件的最佳代码。
我们看以下它侦听器的各项属性:(我这里就讲一个了)
onLoadInit
属性是用于检测文件状态属性的
这个属性非常的重要,因为它能告诉你图片的各项属性,也就是只有这个时候你才能知道文件的尺寸大小。你可以试一下trace(MC._width)是不是就是图片的大小。如果是,就证明图片已经加载完毕,并且你可以通过程序去控制它的大小了。
- onLoadInit= function(target_mc:MovieClip){
- target_mc._width=100;
- target_mc._height=100;
- }
看看是不是加载近来的图片就是100像素*100像素的显示了,你可以通过程序自由控制加载近来的图片大小了。
延伸代码,如何让你的图片可以宽是100像素而高是等比缩放的呢?
- onLoadInit = function(target_mc:MovieClip){
- target_mc._height=(100*target_mc._height)/target_mc._width;
- target_mc._width=100;
- }
target_mc._height=(100*target_mc._height)/target_mc._width;
放在上面很重要的哦,千万不要这样放:
- target_mc._width=100;
- target_mc._height=(100*target_mc._height)/target_mc._width;
这样你的高肯定不是等比率的。
通过以上讲解是不是可以啦!
参考flash帮助文档,我弄了个简单的实验效果,大家可以直接复制粘贴
- this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());
- var mclListener:Object = new Object();
- mclListener.onLoadInit = function(target_mc:MovieClip) {
- target_mc._width = 100;
- target_mc._height = 100
- };
- var image_mcl:MovieClipLoader = new MovieClipLoader();
- image_mcl.addListener(mclListener);
- image_mcl.loadClip("http://www.cuplayer.com/flash/images/image1.jpg", image_mc);
可以测试代码效果
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例