Avatar billede seabag Nybegynder
27. maj 2005 - 01:18 Der er 13 kommentarer

Dynamisk Flash XML menu (tilpasse button size efter textlængde)

hejsa...

Jeg vil lave en flash menu, som henter alle oplysningerne fra en XML fil.

Jeg har søgt og søgt og søgt, efter tutorials, til at hjælpe med at lave en basic menu, men de er alle sammen lige defekte og ikke fuldstændige nok.

Jeg har brugt en tutorial og fået et basis resultat, og det ser sådan her ud.

XML fil:
<?xml version="1.0"?>
<menu>
<item id="| MAIN |" theurl="/2.php" />
<item id=" NEWS |" theurl="/news" />
<item id=" PAINTINGS |" theurl="/paintings" />
<item id=" PHOTOS |" theurl="/paintings" />
<item id=" CASES |" theurl="/paintings" />
<item id=" RADIO |" theurl="/paintings" />
<item id=" FILM |" theurl="/paintings" />
</menu>

og ActionScript'en:

menu = new XML();
menu.ignoreWhite = true;
menu.load("menu.xml");
menu.onLoad = function(){
    items = this.firstChild.childNodes;
    for(a = 0; a<= items.length-1; a++){
        _root.attachMovie( "menuItem", "item"+a, a);
        _root["item"+a].nametxt.text = items[a].attributes.id;
        //Move the movie clip down per execution of the loop
        _root["item"+a]._x = 70*a;
        //Move the MC down by ½ its height so it is inside the stage.
        _root["item"+a]._x += 35;
        //Center the movie clip by making its x ½ its width
        _root["item"+a]._y = 12.5;
        _root["item"+a].itemUrl = items[a].attributes.theurl; 
        _root["item"+a].onRelease = function(){
            getURL(this.itemUrl, "_blank");
            }
        }
    }
Det fungere også fint, jeg har en Horisontal menu som ligner dette:

| MAIN | NEWS | PAINTING | PHOTOS | CASES | RADIO | FILM |
men knapperne ER somsagt 70px lang, som jeg har lavet dem og indretter sig ikke efter textlængde som jo er optimalt.

Spørgsmål:

Hvordan får jeg den til selv at beregne hvor stor knappen skal være? så de lange ord(menupunkter) får den plads de skal bruge og de små, ikke efterlader masser af tom plads.

Eller... har du et link til ligepræsis en rigtig god XML baseret flash menu, som bare er god, og kan pilles ved, og er gratis?
Avatar billede webt Nybegynder
27. maj 2005 - 07:31 #1
Hejsa, nu har jeg jo ikke adgang til alle mc'erne så ved ikke om det her virker, men du kan bruge textWidth til at få bredden på et txt felt i pixels, så noget lign:
menu.onLoad = function() {
    items = this.firstChild.childNodes;
    for (a=0; a<=items.length-1; a++) {
        _root.attachMovie("menuItem", "item"+a, a);
        _root["item"+a].nametxt.text = items[a].attributes.id;
        //gem bredden i txtWidth - vis det er as1.0 så fjerner du bare var og :number
        var txtWidth:Number=_root["item"+a].nametxt.textWidth

        //først sætter vi lige bredden på den og laver den lidt bredere end den er så det hele kan være der
        _root["item"+a]._width=txtWidth+10;
        //Move the movie clip down per execution of the loop - men i stedet for fast værdi bruger vi txtWidth+10 igen       
        _root["item"+a]._x = (txtWidth+10)*a;
        //Move the MC down by ½ its height so it is inside the stage.
        _root["item"+a]._x += 35;
        //Center the movie clip by making its x ½ its width
        _root["item"+a]._y = 12.5;
        _root["item"+a].itemUrl = items[a].attributes.theurl;
        _root["item"+a].onRelease = function() {
            getURL(this.itemUrl, "_blank");
        };
    }
};

Burde klare jobbet, håber det kan bruges

Mvh Martin
Avatar billede seabag Nybegynder
27. maj 2005 - 17:44 #2
hmmm tal for svaret, men jeg kan desværre ikke få det til at funke...
Du virker bedere til AS end jeg, har du evt en løsning på seperator stregen så den ikke er del af knapperne...?
her er en URL til FLA og XML
www.uvo.dk/download/flash_xml_menu.zip

jeg er ikke så god til XML indblandingen, eller det lidt vildere AS...
Avatar billede webt Nybegynder
27. maj 2005 - 18:00 #3
Vil gerne kigge på det, men har først mulighed for det på søndag, skal til bryllup her i weekenden

Håber det er okay

Mvh
Martin
Avatar billede seabag Nybegynder
27. maj 2005 - 19:13 #4
helt okay...
Avatar billede webt Nybegynder
27. maj 2005 - 20:10 #5
Havde lige lidt ekstra tid så ville lige kigge på den men kan ikke åbne fla filen, får unexspected file format, kan du prøve at uploade den igen, eller maile den på mail [a] martin-nielsen.com
Avatar billede webt Nybegynder
27. maj 2005 - 20:36 #6
Kiggede lige lidt emre på din kode og fixede lidt til, tror følgende vil klare det hele uden de store ændringer:
menu.onLoad = function() {
    var items:String = this.firstChild.childNodes;
    var xpos:Number=20; //start position for navigationen x axen
    for (var a=0; a<items.length; a++) {
        _root.attachMovie("menuItem", "item"+a, a);
        _root["item"+a].nametxt.text = items[a].attributes.id;
        var txtWidth:Number=_root["item"+a].nametxt.textWidth //hent pixel bredden på menupunktet
        _root["item"+a]._x = xpos; //flyt menupunt til xpos
        xpos+=txtWidth+10; //tilføj bredden af texten + 10 til xpos så næste menupunkt kommer længere hen 
        _root["item"+a]._y = 12.5;
        _root["item"+a].itemUrl = items[a].attributes.theurl;
        _root["item"+a].onRelease = function() {
            getURL(this.itemUrl, "_blank");
        };
    }
};

Det eneste vi har gjort er at tilføje en variable som holder styr på hvor på x axen punktet skal være, og den ligger vi så tekstens bredde til ved hvert gennemløb i for løkken, på den måde skulle felterne gerne stå lige ved siden ad hinanden

Mvh
Martin
Avatar billede webt Nybegynder
27. maj 2005 - 20:44 #7
Forresten hvis det ikke lige spiller så er kan du tjekke den her:
http://martin-nielsen.com/exp/menu.swf
http://martin-nielsen.com/exp/menu.fla

XML'en er den samme

Mvh
Martin
Avatar billede webt Nybegynder
01. juni 2005 - 08:09 #8
Noget du kan bruge til noget?
Avatar billede seabag Nybegynder
03. juni 2005 - 02:07 #9
vil lige kigge på det snarest...
forløblig tak for hjælpen...
Avatar billede webt Nybegynder
03. juni 2005 - 08:39 #10
Det er bare i orden, jeg smider lige et svar så kan du altid godkende eller afvise når du har fået testet den, af en eller anden grund modtager jeg ikke mail fra eksperten selvom jeg er sat til det så glemmer hurtigt hvilke spørgsmål jeg er med i

Mvh
Martin
Avatar billede webt Nybegynder
29. juni 2005 - 12:53 #11
Filerne er blevet flyttet til: http://martin-nielsen.com/exp/621085/

Mvh
Martin
Avatar billede webt Nybegynder
15. august 2005 - 16:39 #12
Hmm ved at være et gammelt spørgsmål det her, fået kigget på det?/fået det til at virke?

Fortsat god dag
Martin
Avatar billede webt Nybegynder
15. februar 2006 - 22:55 #13
?
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