Galleri med XML
I eksemplet her, er navnene og adresserne på de billeder, som skal bruges i galleriet, listet op i en xml-fil.
Opbygning og overblik

Billedmapperne thumbnails og images indeholder samme billeder i henholdsvis lille og fuld størrelse.
Xml-filen: images.xml laves som en ganske almindelig tekstfil og lægges til dette eksempel i en mappe data og refererer til billedernes sti, navne og billedtekst:
<?xml version="1.0" encoding="utf-8"?> <images> <image full="images/image1.jpg" thumb="thumbnails/image1.jpg">Description of image 1.</image> <image full="images/image2.jpg" thumb="thumbnails/image2.jpg">Description of image 2.</image> <image full="images/image3.jpg" thumb="thumbnails/image3.jpg">Description of image 3.</image> </images>
Forberedelse (brug af classes)
En flashfil: XMLgallery.fla med et tomt movieclip: gallery
Linkage mellem gallery og en as-fil: gallery.as
Instanciering af gallery-class – ved at trække gallery ind på scenen – ELLER som her dynamisk med et framescript på scenen:
var gallery1:gallery=new gallery(); addChild(gallery1);
Opsæt gallery.as og dens class-constructor i sin package:
package { /// :::: A :::: /// Import af flash classes import flash.display.MovieClip; import flash.events.*; public class gallery extends MovieClip { /// :::: B :::: /// Oprettelse af variabler og tilgængeliggørelse af objekt-navne public function gallery() { /// :::: C :::: /// Indledende handlinger - "constructor" } /// :::: D :::: /// Tilknyttede funktioner } }
NB: Bemærk niveauerne A, B, C, D, som opdeler en class, hvori forskellige dele af et actionscript hører hjemme, og som jeg vil henvise til gennem alle nedenstående 3 trin. Hver funktionalitet involverer actions på flere af niveauerne.
Næste trins kode skal ikke erstatte den forrige, men flettes ind i den eksisterende kode på de anviste niveauer, og således implementeres.
Forberedelse (brug af framescript)
En flashfil: XMLgallery.fla med et actionscript-lag på scenen. På dens første keyframe kan niveau-inddeles med kommentarer:
/// :::: A :::: /// Import af flash classes /// :::: B :::: /// Oprettelse af variabler og tilgængeliggørelse af objekt-navne /// :::: C :::: /// Indledende handlinger - "constructor" /// :::: D :::: /// Tilknyttede funktioner
Kodneanvisningerne i nedenstående trin bruges og flettes sammen i frameskriptet UDEN ORDET “PUBLIC” FORAN VARIABLER OG FUNKTIONER
Resten af arbejdet foregår med en trinvis scripting af funktionalitet i opsætningen, gennem følgende 3 trin:
1 – Load og fortolk xml-filen
2 – Load og vis alle thumbnails
3 – Load og vis det valgte billede
1 – Load og fortolk xml-filen
//Niveau A import flash.net.URLRequest; import flash.net.URLLoader; //Niveau B public var xmlDoc:String="data/images.xml"; //Adressen på xml-filen public var xmlLoader:URLLoader=new URLLoader(); //Opret det relevante URLLoader-objekt public var xml:XML; //Navnet på xml-objektet public var xmlList:XMLList; //Navnet på den liste, hvori xml.elementerne kommer til at stå //Niveau C // Load xml-filen med adressen xmlLoader.load(new URLRequest(xmlDoc)); // Når xml-filen er færdig-loadet, udføres XMLCOMPLETE funktionen xmlLoader.addEventListener(Event.COMPLETE, XMLCOMPLETE); //Niveau D public function XMLCOMPLETE(e:Event):void { // Påfyld flash's xml-beholder med xmlLoader-data! xml=XML(e.target.data); // Oplist elementerne fra xml-filens "rod" i rækkefølge xmlList=xml.children(); // Udfør funktionen LOADTHUMBS LOADTHUMBS(); }
2 – Load og vis alle thumbnails
//Niveau A // URLRequest skal kun tilføjes hvis den ikke er importeret på trin 1 import flash.net.URLRequest; import flash.display.Loader; //Niveau B public var thumbLoader:Loader; //Niveau D public function LOADTHUMBS():void { var thumbUrl:String; // For hvert element i xml-filen dannes en "thumbLoader" for (var i:int=0; i<xmlList.length(); i++) { //værdien af hver "thumb" attribut overføres til thumbUrl thumbUrl=xmlList[i].attribute("thumb"); thumbLoader=new Loader(); thumbLoader.load(new URLRequest(thumbUrl)); //thumbLoader bliver snedigt omdøbt til adressen på det fulde billede thumbLoader.name=xmlList[i].attribute("full"); thumbLoader.x=20; // 130=thumb's bredde, 20= passende luft thumbLoader.y=i*130+20; addChild(thumbLoader); // hver thumbLoader aktiveres til at kunne udføre SHOWFULL thumbLoader.addEventListener(MouseEvent.CLICK, SHOWFULL); } }
3 – Load og vis det valgte billede
//Niveau A // URLRequest skal kun importeres hvis den ikke allerede er der import flash.net.URLRequest; // Loader er allerede importeret i trin 2, skal kun tilføjes hvis den mangler import flash.display.Loader; //Niveau B public var fullLoader:Loader; //Niveau D public function SHOWFULL(e:MouseEvent):void { // fjern det viste billede, hvis der er et i forvejen if (fullLoader) { removeChild(fullLoader); } // Opret en fullLoader til det billede, der skal vises fullLoader=new Loader(); //"e.target.name" er "thumbLoader.name" fra LOADTHUMBS var imgUrl=new URLRequest(e.target.name); fullLoader.load(imgUrl); fullLoader.x=160; fullLoader.y=20; addChild(fullLoader); }
Ekstra funktionalitet
- En dynamisk tekstboks til at vise billedteksten fra xml-filen
- En Fade-effekt med flash’s indbyggedeTween-class, på selve billederne når de vises.
//Niveau A import flash.text.TextField; import flash.text.TextFieldAutoSize; import fl.transitions.Tween; import fl.transitions.easing.*; //Niveau B public var imageText:TextField=new TextField(); public var fadeTween:Tween; //Niveau C // Sæt tekstboksens bredde imageText.autoSize=TextFieldAutoSize.LEFT; // Opret den tekstboks, som skal indeholde billedtekst addChild(imageText); // Kan starte med at vise en instruktion til bruger imageText.text=" Klik på en af billederne for at se et stort"; //Niveau D, indenfor SHOWFULL funktionen - nederst // Placer tekstboksen lige over billedkanten imageText.x=fullLoader.x; imageText.y=fullLoader.y-20; // Find den billedtekst, der hører til for (var j:int=0; j<xmlList.length(); j++) { // Samlign thumbLoaders navn med alle xml-listens "full" atributter // "e.target.name" er "imageLoader.name" fra LOADTHUMBS if (xmlList[j].attribute("full")==e.target.name) { // Indholdet fra nummer "j" på xmlList er tekst indpakket i tags // Overfør denne tekst til tekstboksen imageText.text=xmlList[j]; // Igangsæt den importerede Tween class med ønskede indstillinger fadeTween=new Tween(fullLoader,"alpha",None.easeNone,0,1,1,true); } }
Yderlig øvelse og info:
Kapitel 14 i “Learning ActionScript 3.0″ handler specifikt om XML i AS: Strukturen, skrive, læse, slette, loade. Kapitlet afsluttes med en menubar som øvelse.
simple image loader
Created: 10 May 2009 • by admin
Categories: oevelse • xml
Comments: none yet • add one!

