Avatar billede thulstrup Nybegynder
23. januar 2003 - 23:54 Der er 9 kommentarer og
1 løsning

XML galleri

Jeg er ved at (prøve at) lave et galleri med en xml liste over billederne. I den forbindelse er jeg støt ind i en del problemer, som jeg håber I kan hjælpe mig med.

Se først filen her:
http://www.overdose.dk/eksperten/galleri.swf

Fla-filen er her:
http://www.overdose.dk/eksperten/galleri.fla

Xml-filen er her:
http://www.overdose.dk/eksperten/billeder.xml

***********************************************

1: En mere effektiv måde at få de grå kasser til at skifte linie på end:

nyLinie = 6;
nuvaerendeThumb = 0;
thumbnails = function () {
  if (nuvaerendeThumb<10) {
    if (nuvaerendeThumb>=nyLinie) {
      xpos = (nuvaerendeThumb-nyLinie)*20;
      ypos = 420;
    } else {
      xpos = nuvaerendeThumb*20;
      ypos = 400;
}

***********************************************

2: Ved rollOver på de grå kasser skal det tilsvarende thumbnail loades ind i thumbHolder og tilsvarende tekst loades ind i billedeTekst.

***********************************************

3: Ved rollOut skal thumbnailen svarer til det billede der er loadet ind i billedeHolder.

***********************************************

4: Ved onRelease på de grå kasser skal det tilsvarende billede loades ind i billedeHolder.

***********************************************

5: en preloader til billederne
Avatar billede thulstrup Nybegynder
24. januar 2003 - 00:29 #1
6: der er tilsyneladende et uendeligt loop. Siden bliver meget langsom med tiden.
Avatar billede barklund Nybegynder
28. januar 2003 - 10:27 #2
1: Ovenstående er IKKE et loop - det er jo kun en enkelt funktion til at returnere position for et enkelt movieclip. Kan du ikke skrive hele loopet? (og jeg har ikke flash mx, så jeg kan ikke downloade din source)

6: Hvor mange gange loader du din XML ind? Jeg har en mistanke om, at det sker mere end én gang - derfor fylder du din computers hukommelse op og sløver applikationen...
Avatar billede thulstrup Nybegynder
28. januar 2003 - 10:34 #3
Ang. 6, så har jeg fundet ud af det. "nuvaerendeKasse++" var havnet på den forkerte side af en if-sætning, så den blev ved med at tælle op.

Her er koden. Det er ved rollOver/rollOut/onRelease problemerne er:

//
// billedeHolder
createEmptyMovieClip("billedeHolder", 1);
with (billedeHolder) {
    _x = 0;
    _y = 0;
}
//
// thumbHolder
createEmptyMovieClip("thumbHolder", 2);
with (thumbHolder) {
    _x = 300;
    _y = 375;
}
//
// billedeTekst
createTextField("billedeTekst", 5, 0, 360, 0, 0);
with (billedeTekst) {
    variable = "billedeTekst";
    selectable = false;
    autoSize = true;
    embedFonts = true;
    minTekstFormat = new TextFormat();
    minTekstFormat.font = "standard";
    minTekstFormat.size = 8;
    minTekstFormat.color = 0x666666;
    setNewTextFormat(minTekstFormat);
}
//
// antalTekst
createTextField("antalTekst", 6, 100, 360, 0, 0);
with (antalTekst) {
    variable = "antalTekst";
    selectable = false;
    autoSize = true;
    embedFonts = true;
    minTekstFormat = new TextFormat();
    minTekstFormat.font = "standard";
    minTekstFormat.size = 8;
    minTekstFormat.color = 0x666666;
    setNewTextFormat(minTekstFormat);
}
billederXml = new XML();
billederXml.onLoad = startGalleri;
billederXml.load("billeder.xml");
billederXml.ignoreWhite = true;
//
//     Vis det første billede og start variablerne
function startGalleri(success) {
    if (success == true) {
        rootNode = billederXml.firstChild;
        foersteImageNode = rootNode.firstChild;
        nuvaerendeBilledeNode = foersteImageNode;
        // nuværende billede
        nuvaerendeBillede = 1;
        nuvaerendeThumb = 1;
        // antal billeder
        antalBilleder = rootNode.childNodes.length;
        // vis første childNode (første billede og tekst fil)        
        opdaterBillede(foersteImageNode);
        opdaterThumbnail(foersteImageNode);
    }
}
//
// thumnails
nyLinie = 6;
nuvaerendeKasse = 1;
thumbnails = function () {
    if (nuvaerendeKasse<9) {
        if (nuvaerendeKasse>=nyLinie) {
            xpos = (nuvaerendeKasse-nyLinie)*20;
            ypos = 420;
        } else {
            xpos = nuvaerendeKasse*20-20;
            ypos = 400;
        }
        clip = _root.createEmptyMovieClip("thumb"+nuvaerendeKasse, 10+nuvaerendeKasse);
        // den nuværende x position
        clip._x = xpos;
        // den nuværende y position
        clip._y = ypos;
        clip.onEnterFrame = function() {
            this.lineStyle(1, 0xbebebe, 100);
            this.beginFill(0xffffff, 100);
            this.moveTo(0, 0);
            this.lineTo(15, 0);
            this.lineTo(15, 15);
            this.lineTo(0, 15);
            this.endFill(0, 0);
        };
        clip.onRollOver = function() {
            // load thumb ind ind thumbHolder
        };
        clip.onRollOut = function() {
            // tøm thumbHolder
        };
        clip.onRelease = function() {
            // loadet billede ind i billedeHolder
        };
        nuvaerendeKasse++;
    }
};
setInterval(thumbnails, 150);
//
//     opdaterer det nuværende billede med nyt billede og tekst
function opdaterBillede(nyBilledeNode) {
    //     stien til billedet       
    jpgUrl = nyBilledeNode.attributes.jpgURL;
    //     load billedet ind i billedeHolder
    billedeHolder.loadMovie(jpgUrl);
    //     teksten til billedet    
    billedeTekst = nyBilledeNode.firstChild.nodeValue;
    // antal billeder tekst
    antalTekst = nuvaerendeBillede+" af "+antalBilleder;
}
//
// opdater thumbnail
function opdaterThumbnail(nyThumbNode) {
    // stien til thumbnailen
    thumbUrl = nyThumbNode.attributes.thumbURL;
    // load thumbnailen ind i thumbHolder
    thumbHolder.loadMovie(thumbUrl);
}
Avatar billede barklund Nybegynder
28. januar 2003 - 10:45 #4
Er følgende ikke ret dumt:

clip.onEnterFrame = function() {
            this.lineStyle(1, 0xbebebe, 100);
            this.beginFill(0xffffff, 100);
            this.moveTo(0, 0);
            this.lineTo(15, 0);
            this.lineTo(15, 15);
            this.lineTo(0, 15);
            this.endFill(0, 0);
        };

Kan du se det?

På hver evig eneste enterFrame tegner den figuren igen... Det virker som spild af tid eller hvad?
Avatar billede barklund Nybegynder
28. januar 2003 - 10:48 #5
Og du sletter jo heller ikke dit interval, så den bliver ved med at kalde funktionen uden at gøre noget... Du kan jo bare slette det, når den ikke skal lave mere...
Avatar billede thulstrup Nybegynder
28. januar 2003 - 10:59 #6
Nu har jeg fjernet clip.onEnterFrame funktionen. Du havde ret i at den var ret dum, da det jo virker fint uden.
Jeg har også lavet en clearInterval, så den ikke bliver ved med at kalde mit interval.
Avatar billede thulstrup Nybegynder
28. januar 2003 - 13:15 #7
Hvordan kan jeg så identificerer de enkelte movieclips (thumbnails)? Ved rollOver på et bestemt movieclip (f.eks thumb5) skal der jo loades et billede med tilsvarende nummer (pics/div05.jpg).

nyLinie = 6;
nuvaerendeKasse = 1;
thumbnails = function () {
    if (nuvaerendeKasse<9) {
        if (nuvaerendeKasse>=nyLinie) {
            xpos = (nuvaerendeKasse-nyLinie)*20;
            ypos = 420;
        } else {
            xpos = nuvaerendeKasse*20-20;
            ypos = 400;
        }
        clip = _root.createEmptyMovieClip("thumb"+nuvaerendeKasse, 10+nuvaerendeKasse);
        // den nuværende x position
        clip._x = xpos;
        // den nuværende y position
        clip._y = ypos;
        // tegn firkanten
        clip.lineStyle(1, 0xbebebe, 100);
        clip.beginFill(0xffffff, 100);
        clip.moveTo(0, 0);
        clip.lineTo(15, 0);
        clip.lineTo(15, 15);
        clip.lineTo(0, 15);
        clip.endFill(0, 0);
        //
        clip.onRollOver = function() {
            // load thumb ind ind thumbHolder
            if (rootNode.childNodes[du+1] == null) {
                break;
            } else {
                naesteThumbNode = nuvaerendeThumbNode.nextSibling;
                opdaterThumbnail(naesteThumbNode);
                nuvaerendeThumbNode = naesteThumbNode;
            }
        };
        clip.onRollOut = function() {
            // tøm thumbHolder
            // check om det loadede billede er det samme som gamleThumb, hvis det er load gamleThumb
        };
        clip.onRelease = function() {
            // loadet billede ind i billedeHolder
            if (naesteBilledeNode>antalBilleder) {
                break;
            } else {
                naesteBilledeNode = nuvaerendeBilledeNode.nextSibling;
                nuvaerendeBillede++;
                opdaterBillede(naesteBilledeNode);
                nuvaerendeBilledeNode = naesteBilledeNode;
            }
        };
        nuvaerendeKasse++;
    } else {
        clearInterval(intervalId);
    }
};
intervalId = setInterval(thumbnails, 150);
Avatar billede thulstrup Nybegynder
28. januar 2003 - 13:16 #8
whoops sådan her:

nyLinie = 6;
nuvaerendeKasse = 1;
thumbnails = function () {
    if (nuvaerendeKasse<9) {
        if (nuvaerendeKasse>=nyLinie) {
            xpos = (nuvaerendeKasse-nyLinie)*20;
            ypos = 420;
        } else {
            xpos = nuvaerendeKasse*20-20;
            ypos = 400;
        }
        clip = _root.createEmptyMovieClip("thumb"+nuvaerendeKasse, 10+nuvaerendeKasse);
        // den nuværende x position
        clip._x = xpos;
        // den nuværende y position
        clip._y = ypos;
        // tegn firkanten
        clip.lineStyle(1, 0xbebebe, 100);
        clip.beginFill(0xffffff, 100);
        clip.moveTo(0, 0);
        clip.lineTo(15, 0);
        clip.lineTo(15, 15);
        clip.lineTo(0, 15);
        clip.endFill(0, 0);
        //
        clip.onRollOver = function() {
            // load thumb ind ind thumbHolder
        };
        clip.onRollOut = function() {
            // tøm thumbHolder
        };
        clip.onRelease = function() {
            // loadet billede ind i billedeHolder
        };
        nuvaerendeKasse++;
    } else {
        clearInterval(intervalId);
    }
};
intervalId = setInterval(thumbnails, 150);
Avatar billede thulstrup Nybegynder
28. januar 2003 - 14:57 #9
Ikke noget alligevel, fandt selv ud af det.

_root["thumb"+nuvaerendeKasse].nummer = nuvaerendeKasse;
Avatar billede thulstrup Nybegynder
03. marts 2003 - 12:30 #10
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester