Volledige versie bekijken : gallery height traceren
valeries
%Europe/Berlin %385 %2010, 10:14
hallo
Helemaal nieuw in ActionScript ben ik gestart aan een eerste site in AS3.
Op de hoofdpagina van de site heb ik een fotoblog gemaakt... de foto's worden onder elkaar geladen met een scroll. Ze worden ingelezen vanuit xml.
De foto's hebben niet steeds dezelfde hoogte. Nu heb ik een afstand tussen de afbeeldingen van 790px en dat werkt goed voor de afbeeldingen van 780px hoog. Die komen mooi onder elkaar met 10px ruimte tussen.
Maar, voor de kleinere afb is die afstand te groot.
Nu moet ik de hoogte traceren van de vorige afbeelding en dan aangeven dat daarbij 10px ruimte moet toegevoegd worden? Maar dat lukt me niet.
In bijlage de volledige code.
Alvast hartelijk dank :-)
valerie
marcvz
%Europe/Berlin %551 %2010, 14:13
In je code zie ik functies in fucnties.. Dat is een beetje raar..
Maar goed, wat ik meestal doe is de images opslaan in een array.
En als er dan een nieuwe image geladen is krijgt deze als y waarde: y waarde laatste array item + height laatste array item + spacing.
valeries
%Europe/Berlin %570 %2010, 14:41
Hoi
Die functies in functies heb ik proberen wegwerken, maar dan wil het script niet meer. Ik weet niet of het echt een probleem is?
Heb ondertussen de code verder aangepast en luk er nu in om de image.height te tracen.
Om deze nu verder te gebruiken, daar geraak ik nog niet echt uit.
function loadImages():void {
trace(imageNum);
var thisLargeImage:String=imageArray[imageNum];
var thisDescription:String=descriptionArray[imageNum];
var imageLoader:Loader = new Loader();
imageLoader.load(new URLRequest(imageArray[imageNum]));
imageLoader.y=830*imageNum;//
var outputText:TextField = new TextField();
outputText.htmlText=thisDescription;
outputText.setTextFormat(new TextFormat("Arial"));
outputText.y=790+830*imageNum;
outputText.textColor=0xFFFFFF;
trace("thisLargeImage: " + thisLargeImage);
trace("thisDescription: " + outputText.text);
trace("Y-waarde: " + imageLoader.y);
imageLoader.contentLoaderInfo.addEventListener(Eve nt.COMPLETE, imageLoaded);
function imageLoaded(event:Event):void {
var newImageLoader:Loader=Loader(event.target.loader);
var image:Bitmap=Bitmap(imageLoader.content);
var CurrentYLength=image.height;
trace(CurrentYLength);
scrollingContent.addChild(imageLoader);
scrollingContent.addChild(outputText);
}
imageNum++;
if (imageNum<totalImages) {
loadImages();
}
}
grtz en dank alvast
valeries
%Europe/Berlin %405 %2010, 10:43
Hoi
Een andere optie...
Kan ik in het xml-bestand de attributen 'horizontaal' en 'verticaal' meegeven.
En dan aan de imageloader.y meegeven dat het indien 'horizontaal' 800*imageNum moet zijn en bij 'verticaal' 600*imageNum?
groeten en dank alvast
valeries
%Europe/Berlin %464 %2010, 12:08
heb aan xml toegevoegd:
<title>titel van afb 1</title>
<largeImage>web_images/001.jpg</largeImage>
<description><![CDATA[beschrijving1]]></description>
<imgW>780</imgW>
<imgH>780</imgH>
de volledige code:
stop();
var imageArray:Array = new Array();
var descriptionArray:Array = new Array();
var imgWArray:Array = new Array();
var imgHArray:Array = new Array();
var imageNum:Number=0;
var totalImages:Number;
//XML laden + functie loadImages starten
var XMLURLLoader:URLLoader = new URLLoader();
XMLURLLoader.load(new URLRequest("web_images/news/news.xml"));
XMLURLLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(event:Event):void {
var theXMLData:XML=new XML(XMLURLLoader.data);
totalImages=theXMLData.title.length();
for (var i:Number = 0; i < totalImages; i++) {
imageArray.push(theXMLData.largeImage[i]);
descriptionArray.push(theXMLData.description[i]);
imgHArray.push(theXMLData.imgH[i]);
}
loadImages();
}
//load images
function loadImages():void {
trace(imageNum);
var thisLargeImage:String=imageArray[imageNum];
var thisDescription:String=descriptionArray[imageNum];
var thisImgH:String=imgHArray[imageNum];
var imageLoader:Loader = new Loader();
imageLoader.load(new URLRequest(imageArray[imageNum]));
if (Number(thisImgH) > 520) {
imageLoader.y=830*imageNum;
} else {
imageLoader.y=550*imageNum;
}
var outputText:TextField = new TextField();
outputText.htmlText=thisDescription;
outputText.setTextFormat(new TextFormat("Arial"));
outputText.y=790+830*imageNum;
outputText.textColor=0xFFFFFF;
trace("thisLargeImage: " + thisLargeImage);
trace("thisDescription: " + outputText.text);
trace("thisImageHeight: " + thisImgH);
trace("Y-waarde: " + imageLoader.y);
imageLoader.contentLoaderInfo.addEventListener(Eve nt.COMPLETE, imageLoaded);
function imageLoaded(event:Event):void {
//var newImageLoader:Loader=Loader(event.target.loader);
//var image:Bitmap=Bitmap(imageLoader.content);
//image.smoothing=true; //afb zachter maken
//image.scaleX = image.scaleY = 0.99; //afb zachter maken
//var CurrentYLength=image.height;
//trace(CurrentYLength);
scrollingContent.addChild(imageLoader);
scrollingContent.addChild(outputText);
}
imageNum++;
if (imageNum<totalImages) {
loadImages();
}
}
Er zijn geen foutmeldingen, maar de afstand tussen de afbeeldingen is nog steeds niet goed...
DonnYWaltz
%Europe/Berlin %519 %2010, 13:28
Ik ga geen kant en klare code geven maar heb je er al eens aan gedacht om het in deze richting te zoeken om te bepalen waar de afbeelding moet staan?
var volgendeX:Number = 0;
en dan in de functie waar je de afbeelding toevoegd aan de stage:
afbeelding.x = volgendeX;
volgendeX = afbeelding.x+afbeelding.height+spacing;
succes!
valeries
%Europe/Berlin %646 %2010, 16:30
Thx!!!!!!
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.