/* 先载入所有图片及标签,然后通过设置图片的深度来显示相应的图片(并非点击标签后再载入相应图片,因为这种幻灯片一般图片比较少) */ package { import flash.display.Sprite; import flash.net.URLLoader; import flash.net.URLRequest; import flash.display.Loader; import flash.events.Event; import flash.events.MouseEvent; import flash.utils.Timer; import flash.events.TimerEvent; public class Main extends Sprite { var xmlURL:String="pict.xml"; var xml:XML; var len:int; var arr_picURL:Array;//图片路径 var arr_pic:Array;//存储图片的数组 var arr_label:Array;//存储标签的数组 var picSprite:Sprite;//装图片的容器,定义这个容器的目的是:方便直接设置标签处于所有图片的上方 var labelSprite:Sprite;//装标签的容器 var oldLabel:PhotoLabel; var timer:Timer; var currentIndex:int;//当前显示图片的索引号 var counter:int;//作用:当所有图片载入完成后,将第一张图片设为默认显示图片(将其深度设为8) public function Main():void { picSprite=new Sprite ; showArea.addChild(picSprite); picSprite.x=10; picSprite.y=10; labelSprite=new Sprite ; showArea.addChild(labelSprite); labelSprite.x=20; labelSprite.y=230; init(); } private function init():void { loadXML(xmlURL); } //---------------------------------------------------------------------------------@载入XML private function loadXML(url:String):void { var xmlLoader:URLLoader=new URLLoader ; xmlLoader.load(new URLRequest(url)); xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded,false,0,true); } private function xmlLoaded(e:Event):void { xml=XML(e.currentTarget.data); len=xml.pict.length(); arr_picURL=[]; arr_pic=[]; arr_label=[]; for (var i:int=0; i<len; i++) { var url:String=xml.pict[i].url; arr_picURL[i]=url; } loadLabel(); loadPic(); timer=new Timer(2000,0); timer.addEventListener(TimerEvent.TIMER,loopPic,false,0,true); timer.start(); } //---------------------------------------------------------------------------------@载入标签 private function loadLabel():void { for (var i:int=0; i<len; i++) { var photoLabel:PhotoLabel=new PhotoLabel(String(i)); photoLabel.name=String(i); labelSprite.addChild(photoLabel); arr_label.push(photoLabel); photoLabel.x=(photoLabel.width+8)*i; photoLabel.addEventListener(MouseEvent.MOUSE_OVER,photoLabelMouseOver,false,0,true); photoLabel.addEventListener(MouseEvent.MOUSE_OUT,photoLabelMouseOut,false,0,true); photoLabel.addEventListener(MouseEvent.CLICK,photoLabelClick,false,0,true); } } private function photoLabelMouseOver(e:MouseEvent):void { var photoLabel:PhotoLabel=e.currentTarget as PhotoLabel; if (! photoLabel.clicked) { photoLabel.scaleX=1.2; photoLabel.scaleY=1.2; } } private function photoLabelMouseOut(e:MouseEvent):void { var photoLabel:PhotoLabel=e.currentTarget as PhotoLabel; if (! photoLabel.clicked) { photoLabel.scaleX=1; photoLabel.scaleY=1; } } private function photoLabelClick(e:MouseEvent):void { var photoLabel:PhotoLabel=e.currentTarget as PhotoLabel; var index:int=int(photoLabel.name); currentIndex=index;//加这句代码的目的是:当点击标签后,循环播放的是接下来的标签对应的图片 if (photoLabel!=oldLabel) { photoLabel.clicked=true; showPic(index); } } //此段是核心 private function showPic(index:int):void { var photoLabel:PhotoLabel=arr_label[index]; if (oldLabel) { oldLabel.scaleX=1; oldLabel.scaleY=1; oldLabel.clicked=false; } photoLabel.scaleX=1.4; photoLabel.scaleY=1.4; oldLabel=photoLabel; picSprite.setChildIndex(arr_pic[index],8); } //---------------------------------------------------------------------------------@载入图片 private function loadPic():void { for (var i:int=0; i<len; i++) { var picLoader:Loader=new Loader ; var picURL:String=arr_picURL[i]; picSprite.addChild(picLoader); //picLoader.x=15*i; //picLoader.y=15*i; arr_pic.push(picLoader); picLoader.load(new URLRequest(picURL)); picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,picLoaded,false,0,true); } } private function picLoaded(e:Event):void { counter++; var pic:Loader=e.currentTarget.loader; pic.width=400; pic.height=250; if (counter==9) { showPic(0); } } //---------------------------------------------------------------------------------@循环播放图片 private function loopPic(e:TimerEvent):void { currentIndex++; if(currentIndex==len){ currentIndex=0; } showPic(currentIndex); } } }