/*
先载入所有图片及标签,然后通过设置图片的深度来显示相应的图片(并非点击标签后再载入相应图片,因为这种幻灯片一般图片比较少)
*/
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);
}
}
}
![](https://pic002.cnblogs.com/img/sx01117/201008/2010080217551450.jpg)