Avatar billede davidchristensen Praktikant
28. februar 2002 - 21:46 Der er 24 kommentarer og
1 løsning

PopUp menu via array

Hey folkens.

Er der nogen der vil lære mig at lave en dynamisk popupmenu, hvor antal menupunkter og underpunkter er deffineret i et array? :)

Jeg forestiller mig noget med, at hvertmenupunkt udgør et movieclip - så det er vel noget med at duplekere nogle movieclips der indeholder en knap og noget dynamisk tekst og placere dem ovenover hinanden..? Også linket, som de enkelte menupunkter referer til skal være dynamisk jf. et array i et tekst-dokument..

Nogen der kan kringle dén? :D

David
-
Avatar billede davidchristensen Praktikant
28. februar 2002 - 23:34 #1
Sig mig, er folk gået i strejke, eller er mit spørgsmål noget der ikke kan lade sig gøre?..
Avatar billede davidchristensen Praktikant
28. februar 2002 - 23:41 #2
Okay, se. Nikolaj har lavet følgende:

minArray = new Array('navn1', 'navn2', 'navn3', 'navn4', 'navn5');
offsetHeight = _root.clip._height;
offsetWidth = _root.clip._width;
for (i=0; i<minArray.length; i++) {
    duplicateMovieClip ("clip", "clip"+i, i);
    _root["clip"+i]._y = _root["clip"+(i-1)]._y+offsetHeight;
    _root["clip"+i].tekst = minArray[i];
}

Det er jo smart, men ikke smart nok ;) Arrayet skal hentes fra en tekstfil, knappernes funktion skal ligeledes deffineres fra en tekstfil, samt der skal være underpunkter, som viser sig til højre for menuen.

Kom nu. Tag jer nu sammen! :)

David
-

PS. Tak til Nikolaj, gid han må smide et svar..
Avatar billede paask Nybegynder
01. marts 2002 - 00:35 #3
En lille idé der ikke er helt gennemtænkt eller afprøvet...

Din første variabel i txt filen er alle dine array elementer, eksempelvis array=navn1$navn2$navn3$navn4

Så tager du denne variabel (i Flash) og splicer den ved specialtegnet, her $, og indsætter de splicede nye variabler i hvert sit index i minArray. Så er arrayet klaret...

Dine andre variabler i txt filen kan så være funktionerne, eks...
&funktion1=on(release){blabla}
&funktion2=on(release){blabla2}

Disse kan du ligeledes indsætte i et andet array og sammenhøre dem med de forskellige menupunkter, de 'clip's der bliver duplikeret...

Det var bare en tanke :0)
Avatar billede barklund Nybegynder
01. marts 2002 - 11:41 #4
Man kan ikke loade et script... eval() er som bekendt alt for svar til dette... Bare lige en tanke...

David, jeg skal prøve, men det tager lidt tid... Jeg sidder i forvejen og laver en masse forskellige dynamiske menuer, så denne kan jeg nok også kringle... Men det bliver ikke lige denne uge...
Avatar billede davidchristensen Praktikant
01. marts 2002 - 17:12 #5
Paask, det er netop sådan hen á la detder du laver dér. :)

Det er pænt af jer at I prøver. Og Barklund, jeg glæder mig..:D

David
-
Avatar billede davidchristensen Praktikant
02. marts 2002 - 02:28 #6
Ja, jeg glæder mig.. :)
Avatar billede barklund Nybegynder
02. marts 2002 - 10:51 #7
Smid lige en mail - så har jeg et eksempel senere i dag...
Avatar billede davidchristensen Praktikant
02. marts 2002 - 12:23 #8
Okay.. Post@dlcd.dk :)
Avatar billede barklund Nybegynder
02. marts 2002 - 12:40 #9
mail smidt...
Avatar billede barklund Nybegynder
02. marts 2002 - 14:09 #10
Så har jeg selv oploaded den: www.dcld.dk/Hjemmeside/Barklund/menu.zip :o)
Avatar billede barklund Nybegynder
02. marts 2002 - 14:10 #11
Avatar billede barklund Nybegynder
02. marts 2002 - 15:01 #12
Kan det forstås? .txt-filens opbygning er rimeligt kryptisk med 3 forskellige specialtegn til adskillelse af punkter...
Avatar billede davidchristensen Praktikant
02. marts 2002 - 19:48 #13
Det kan udmærket forstås, men egentlig har du programmeret den lidt for avanceret efter det jeg søger.. Se, det jeg har i tankerne er: et movieclip, som indeholder x-antal moviclips -(som igen indeholder en knap)-jv. array.

Min udgangspunkt er en menu der ligner "Start"knappen i windows. Nå man trykker på den, glider Movieclippet op med menuen og x-antal knapper indei. Animationen, der viser MC'et glide op, kan jeg jo selv lave, på samme måde som man plejer at lave en rollupmenu.)

Nogle af disse MC (knapper) i menu1, indeholder jo menupunkter. Når man holder courseren over knappen, så glider menu2 frem under menu1 og placerer sig på højre side af menu1 - og fungerer på den måde som submenu til een af knapperne.

Så, faktisk, dét jeg skal bruge er et MC, hvori knap-mc'et duplikerer sig og ligger sig ovenover hinanden (uden mellemrum :) alt efter hvad der er deffineret i array.

Så skal der så være et submenuMC, som bliver kaldt af en af knapperne i hovedMC'et, som placerer sig ud for dén knap der har kaldt det - og dette submenuinstance indeholder så de relevante menupunkter jv array. En af knapperne i submenuen kunne jo tænkes også at skulle få brug for en subsubmenu, men princippet for dén er fuldstændig megen til princippet for submenuen, det placere sig så bare en tak længere ude end submenuen iforhold til hovedemenuen.

Jeg håber du forstår hvad jeg mener, for jeg kan godt føle at jeg sidder og væver lidt i det nu.. :)

Iøvrigt, så må du huske at tage højde for at menuerne placerer sig ordenligt i forhold til hinanden. Hovedemenuen skal placere sit nederste menupunkt lige over "Start"knappen og ang. submenuerne, så skal det øverste menupunkt placere sig på linie til højre for (uden mellemrum) dét menupunkt der har kaldt den.

Mht. rollover og rolloutfunktionerne, så tror jeg det bliver min egen hovedepine (men jeg har tænkt mig at lave det med en usynlig knap der ligger bag selvemenuen, så når man rammer dén, så vil menuerne gå til et frame i deres respektive MC'er, hvor de så ruller tilbage igen hvor de kom fra. Min migræne er så, at denne usynlige knap, jo skal sørge for altid at være lidt større end menuerne ligemeget hvor mange menupunkter og hvor lange de bliver..

Nu må du råbe op, hvis der er noget.. :)
Avatar billede davidchristensen Praktikant
02. marts 2002 - 19:50 #14
Rettelse. Første afsnit: "en knap)-jv. array." = " en knap)-jF. array."
Avatar billede davidchristensen Praktikant
02. marts 2002 - 19:53 #15
..Smutter lige ned i kiosken, skal du ha' noget med? - Nogen andre..? ;)
Avatar billede davidchristensen Praktikant
02. marts 2002 - 19:58 #16
Jeg kan også forkorte alt dether lidt:

Så, faktisk, dét jeg skal bruge er et MC, hvori knap-mc'et duplikerer sig og ligger sig ovenover hinanden (uden mellemrum :) alt efter hvad der er deffineret i array. Den enste forskel på hovedemenuen og submenuerne er jo sådanset bare hvordan de er blevet animeret og hvor jeg har sat dem til at placere sig.

Så er der jo så godtnok noget med dén usynlige knap der jo skal følge menuerne i størrelsen..

Og - så er der det lille script, som puttes på array - som skal kalde forskellige ting (eks. submenuen..) Man skal helst kunne bruge hvilket somhelst gængs udtryk/variabel/funktion, som man kan sætte på en alm. knap.

:)
Avatar billede davidchristensen Praktikant
02. marts 2002 - 20:00 #17
Nåjo, menuernepunkterne skal jo stadigvæk kunne navngives (eller prædikeres) jf. array via deres dynamiske tekstfelt.. Så dét er jo fint nok :)
Avatar billede davidchristensen Praktikant
02. marts 2002 - 20:00 #18
Så, nu holder jeg min mund for et stykke tid.. :)
Avatar billede paask Nybegynder
02. marts 2002 - 20:08 #19
Kan du ikke lige hente en pakke blå Kings, og måske sætte kaffe over :0)
Avatar billede barklund Nybegynder
02. marts 2002 - 20:56 #20
Jeg synes godt nok, at du bliver krævende... Men mit eksempel kræver da kun en lille modifikation for at vende på den anden led...

før: www.dlcd.dk/hjemmeside/barklund/rullemenu.swf

efter: www.dlcd.dk/hjemmeside/barklund/rullemenu2.swf

/Barklund
Avatar billede barklund Nybegynder
02. marts 2002 - 20:58 #21
Men den del med mere kode er næsten umulig... Den implementerede version kan klare simple funktionskald og intet andet - altså kun funktioner defineret i _root med 0 eller 1 argument...
Avatar billede paask Nybegynder
02. marts 2002 - 21:00 #22
De er godt nok imponerende Barklund! Jeg vil også meget gerne se din metode!
Avatar billede barklund Nybegynder
02. marts 2002 - 21:06 #23
Scriptet er blot:

onClipEvent(data) {
    _root.Points = p = new Array();
    var s = menu.split("$");
    for (i = 0; i < s.length; i++) {
        s[i] = s[i].split("?");
        if (s[i].length > 1) {
            p[i] = {t:s[i][0], ps:s[i].slice(1,s[i].length)};
            for (j = 0; j < p[i].ps.length; j++) {
                var tmp = p[i].ps[j].split(":");
                p[i].ps[j] = {t:tmp[0], fun:tmp[1], arg:tmp[2]};
            }
        } else {
            p[i] = {t:s[i][0]};
        }
        if (!i) {
            t = p[i].t;
        } else {
            this.duplicateMovieClip("super_" add i, i*20);
        }
    }
    delete s, tmp, i, j, menu;
}
onClipEvent(load) {
    nametype = _name.split("_")[0];
    namenum = int(_name.split("_")[1]);
    p = _root.Points;
    if (nametype eq "super") {
        open = 0;
        _y -= namenum*_height;
        t = p[namenum].t;
        this["click_" add _name] = function() {
            if (!open) {
                if (_root.open)
                    _root.open.collapse();
                _root.open = this;
                open = 1;
                for (i = 0; i < p[namenum].ps.length; i++)
                    this.duplicateMovieClip("sub_" add namenum add "_" add i, namenum*20+i+1);
            } else {
                collapse();
            }
        }
        function collapse() {
            open = 0;
            for (i = 0; i < p[namenum].ps.length; i++)
                _root["sub_" add namenum add "_" add i].removeMovieClip();
        }
    } else {
        subnum = int(_name.split("_")[2]);
        mySuper = "super_" add namenum;
        _x += _width;
        if (subnum) {
            _y -= subnum*_height;
        }
        dp = p[namenum].ps[subnum];
        t = dp.t;
        this["click_" add _name] = function() {
            _root[dp.fun](dp.arg);
            _root[mySuper].collapse()
        }
    }
}

Eller blot og blot - det blev jo ret omfattende... :o)

MC indeholder et tekstfelt med navn "t" og en knap, der kalder:

on(release) {
    this["click_" add _name]();
}

Tekstfilen indeholder:

menu=Main?Forside:gotoAndStop:1$Referencer?DTU:getURL:www.dtu.dk?Danmark:getURL:www.danmark.dk$Diverse?Links:gotoAndStop:2?Fun Stuff:gotoAndStop:3?Disney:getURL:www.disney.com$Hjælp?Om...:gotoAndStop:10

Det hele startes med frame action:

loadVariables("arrays.txt",super_0);

Hvor det første mc med ovenstående kode skal hedde super_0

/Barklund
Avatar billede davidchristensen Praktikant
08. september 2002 - 15:34 #24
Så der mam' Barklund.. Iøvrigt så har jeg måske et lille job til dig hvis du vil.. Jeg har ik kunne få fat på Nikolaj.. :)
Avatar billede barklund Nybegynder
09. september 2002 - 11:13 #25
Hey tak...
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