hi leute
Ich arbeite gerade an einer xml Galerie.
Allerdings funktioniert noch nicht alles.
hier erstmal der Sourcecode:
PHP-Code:
import gs.*; //tween max imports.
import gs.easing.*;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var i:Number = 0
var spacing:Number = 20; //der abstand zwischen den bildern.
var frameBorder = 10; //breite des randes (/2) (auf jeder seite 5)
var thumbX:Number = 0; //gesamtbreite der bilder sowie dessen abstand
var currentImg:Number = 1; //momentanes bild
var my_images:XMLList;
var my_total:Number; //die anzahl bilder
var container_mc:MovieClip;
var preloader:preloader_mc = new preloader_mc();
var path:String = "gallery/";
var gallery:String = "switzerland/";
var isNotWorking:Boolean = true;
var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("gallery/"+gallery+"galleryData.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
stage.addEventListener(Event.RESIZE, Resize);
button_01.addEventListener(MouseEvent.CLICK, onBtn)
button_02.addEventListener(MouseEvent.CLICK, onBtn)
button_03.addEventListener(MouseEvent.CLICK, onBtn)
var infoMc:per_mc = new per_mc();
infoMc.info_mc.addEventListener(MouseEvent.MOUSE_OVER, onInfoOver);
infoMc.info_mc.addEventListener(MouseEvent.MOUSE_OUT, onInfoOut);
addChild (infoMc);
infoMc.y = infoMc.height/2;
infoMc.x = 10;
//durch mouse over (onInfoOver) wird der text wieder sichtbar.
function processXML(e:Event):void {
var myXML:XML = new XML(e.target.data);
my_images = myXML.images.photo;
my_total = my_images.length();
createContainer();
callThumbs();
myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
//myXMLLoader = null;
}
function createContainer():void {
container_mc = new MovieClip();
container_mc.x = (stage.stageWidth/2)-(my_images[0].width/2);
container_mc.y = (stage.stageHeight/2);
addChild(container_mc);
container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.addEventListener(MouseEvent.MOUSE_OUT, onOut);
container_mc.buttonMode = true;
container_mc.addChild (preloader);
}
function callThumbs():void
{
isNotWorking = false;
if (i<=0) //passt den hintergrund beim ersten druchlauf der höhe und breite der stage an
{
bg_mc.width = stage.stageWidth;
bg_mc.height = stage.stageHeight;
}
var thumb_url = path +gallery+ my_images[i].img;
var thumb_loader = new Loader();
thumb_loader.load(new URLRequest(thumb_url));
thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);
thumb_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoading);
infoMc.per_txt.alpha = 1;
TweenMax.to(infoMc.per_txt,3,{alpha:0.3}); //der info text wird nach 3 sek. unsichbar.
thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, donePb);
thumb_loader.addEventListener(MouseEvent.CLICK, onClick);
thumb_loader.x =0;
thumb_loader.y = stage.stageHeight/2
preloader.x =thumbX; //positioniert den preloader an der selben stelle wo die bilder später abgelegt werden.
preloader.y =-(my_images[i].height/2);//das bild wird in der Y achse zentriert, so auch der preloader
preloader.height =0; //setzt die höhe auf 0, diese wird während des ladevorgang immer wieder aktualisiert.
isNotWorking = true;
}
function thumbLoaded(e:Event):void
{//wird ausgeführt, wenn das bild geladen wurde.
var my_thumb:Loader = Loader(e.target.loader);
my_thumb.x = thumbX; //thumbX enthält alle breiten der bisher geladenen bilder, sowie dessen abstand.
TweenMax.to(my_thumb, 1, {colorMatrixFilter:{saturation:0,brightness:0}});//setzt den kontrast sowie helligkeit
my_thumb.y = -my_thumb.height/2;
//dies erstellt ein rechteck, mit der breite und höhe des aktuellen bildes.
var frame:Sprite = new Sprite();
frame.graphics.beginFill(0xFFFFFF,1);
frame.graphics.drawRect(0,0,my_thumb.width,my_thumb.height);
frame.graphics.endFill();
frame.x = my_thumb.x-(frameBorder/2);
frame.y = my_thumb.y-(frameBorder/2);
frame.width = frame.width+frameBorder;//und addiert ein rand.
frame.height = frame.height+frameBorder;
container_mc.addChildAt(frame,0);
TweenMax.to(frame, 0, {colorMatrixFilter:{saturation:0,brightness:0}});
if (currentImg == my_total) //wenn alle bilder geladen sind, wird dies ausgeführt.
{ //hier werden eventlistener und Childs entfernt, die nicht mehr gebraucht werden.
//removeChild(infoMc);
//container_mc.removeChild(preloader);
infoMc.info_mc.removeEventListener(MouseEvent.MOUSE_OVER, onInfoOver);
infoMc.info_mc.removeEventListener(MouseEvent.MOUSE_OUT, onInfoOut);
}
if (i < my_total-1) //wird ausgefürt solange nicht alle bilder geladen sind. 1 wird entfertn da i um 1 kleiner ist, als die anzahl geladener bilder.
{
thumbX = thumbX+ my_thumb.width+spacing; //dies zählt die breite sowie den abstand des momentanen bildes zu thumbX dazu.
i++;
currentImg++;
callThumbs();
}
container_mc.addChild(my_thumb);
my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETE, thumbLoaded);
}
function donePb(e:Event):void
{
//entfernt den aktuellen loader
var removeLoader:Loader = Loader(e.target.loader);
removeLoader.removeEventListener(Event.COMPLETE, donePb);
}
function onOver(e:MouseEvent):void
{
TweenMax.to(e.target, 0.25, {colorMatrixFilter:{saturation:1,brightness:1}});
}
function onOut(e:MouseEvent):void
{
TweenMax.to(e.target, 0.25, {colorMatrixFilter:{saturation:0,brightness:0}});
}
function onLoading(e:ProgressEvent):void
{
var per = Math.floor(e.bytesLoaded/e.bytesTotal* 100);
infoMc.per_txt.text = (per+"%"+" Loading "+currentImg+" of "+my_total)
preloader.height = (per/100) * my_images[i].height;
}
function onClick(e:MouseEvent):void
{ //der container wird verschoben bis das angeklickte bild in der bühenmitte liegt.
TweenMax.to(container_mc,1,{x:-e.currentTarget.x-e.currentTarget.width/2+stage.stageWidth/2,ease:Back.easeInOut})
}
function onInfoOver (e:MouseEvent):void
{ //der infotext wird sichtbar
TweenMax.to(infoMc.per_txt,0.5,{alpha:1})
}
function onInfoOut (e:MouseEvent):void
{ //und wieder unsichtbar, wenn der mauszeiger von button ist.
TweenMax.to(infoMc.per_txt,0.5,{alpha:0})
}
function Resize(e:Event):void
{ //wird ausgelöst beim ändern der fenster grösse.
container_mc.y = (stage.stageHeight/2);
bg_mc.width = stage.stageWidth;
bg_mc.height = stage.stageHeight;
}
function onBtn(e:MouseEvent):void
{
removeChild (container_mc)
i = 0;
thumbX = 0;
currentImg = 1;
switch (e.currentTarget.name)
{
case "button_01":
gallery = "switzerland/";
break;
case "button_02":
gallery = "italy/"
break;
case "button_03":
gallery = "photoshop/"
break;
}
myXMLLoader.load(new URLRequest("gallery/"+gallery+"galleryData.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
}
Ich habe auf der Bühne drei Buttons, die die Funktion "onBtn" aufrufen und den Pfad der xml ändern.
das problem ist momentan, das ich gelegentlich einige fehler bekomme:
1. Bei wechseln der Galerien (etwa jedes 5. mal):Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.
2. Wenn ein Bild läd, und dann die Galerie gewechselt wird, werden das neue und alte Bild geladen, aber nur das neue angezeigt (was ich ja auch will).
bei "a" und "b" seht ihr, das die Galerie gewechselt wurde, aber 2 Bilder geladen werden.
http://www.flashforum.de/forum/attac...1&d=1247317676
3. in seltenen fällen Stopt der Film, bez. der Ladevorgang geht nicht weiter, obwohl dieser komplett geladen wurde.
4.Es kommt vor, das beim wechseln der Galerie das erste Bild, übersprungen, oder ein Bild aus der vorherigen Galerie geladen wird...
5.wie kann ich das anstellen, das, wenn ich auf ein Bild klicke, dies wie beim rollOver heller und farbig wird, und bleibt, bis das nächste Bild angeklickt wird?
so sieht es momentan aus:
http://www.spy15.ch/two/gallery_standalone.html