Avatar billede anton112 Nybegynder
04. december 2008 - 21:01 Der er 2 kommentarer

dhtmlcentral Coolmenu - berening af menupunkters placering virker

Min kæreste er blevet webmaster for en hjemmeside (lavet i Frontpage ;-(  ), som hun ikke har været med til at designe fra starten. Dermed siger jeg at den IKKE kan genopbygges fra starten – arbejdet vil være alt for stort i forhold til resultatet. Vi må altså prøve at få det bedste ud af det der allerede eksisterer. Hjemmesiden er designet til at skulle kunne køre på en 800x600 skærmopløsning, idet der ligger en centreret tabel med fast bredde (800px) indholdende al information.

Menuen er opbygget vha. Coolmenus, som sådan set virker udmærket i IE fullscreen (altså fuld bredde) i 1024x768 og 1280x1024 skærmopløsning. Men i et vindue der ikke er fuld bredde, beregnes placeringen af menupunkterne ikke korrekt. I den javakode der ligger bag hjemmesiden, er der endda ikke andre højere opløsninger implementeret (dvs. 1360, 1440, 1600 eller 1920 bredde). Og det var denne begrænsning, der har ført mig til at stille dette spørgsmål.

I min analyse af, hvad der skal til for at beregne placeringen ved enhver skærmopløsning, er jeg kommet frem til følgende konklusioner vedr. den opsætning vi har:

1. placeringen er absolut, dvs. øverste venstre hjørne er ækvivalent med browservinduets.
2. den dynamiske beregning af placeringen ved ændring af  browservinduets størrelse er indlejret i initialiseringen af menukoden (se nedenfor).

Den oprindelige kode til opsætningen er vist herunder:

case 1024:
//Skærm Opløsning 1024
oM=new makeCM("oM"); oM.resizeCheck=1; oM.rows=1;  oM.onlineRoot="/"; //oM.offlineRoot="file:///D|/data/web/dsah/";
oM.offlineRoot="file:///C|/Documents and Settings/Administrator/Dokumenter/Mine websteder/www/";
oM.pxBetween =0; oM.fillImg="cm_fill.gif"; oM.fromTop=139; oM.fromLeft=155; oM.wait=300; oM.zIndex=400;
oM.useBar=1; oM.barWidth="75%"; oM.barHeight="menu"; oM.barX=104;oM.barY="menu"; oM.barClass="clBar";
oM.barBorderX=0; oM.barBorderY=0;
oM.level[0]=new cm_makeLevel(90,21,"clT","clTover",1,1,"clB",0,"bottom",0,0,0,0,0);
oM.level[1]=new cm_makeLevel(102,22,"clS","clSover",1,1,"clB",0,"right",0,0,"script/menu_arrow.gif",10,10);
oM.level[2]=new cm_makeLevel(110,22,"clS2","clS2over");
oM.level[3]=new cm_makeLevel(140,22);

var avail="141+((cmpage.x2-235)/7)";
oM.menuPlacement=new Array(152,avail+"-1",avail+"*2-15",avail+"*3-12",avail+"*4-7",avail+"*5-9",avail+"*6+5")
break

Jeg har kunnet konstatere, at de tre væsentlige kodelinier er (bemærk: syv menupunkter vandret!!!):

-    oM.barX=500;
-    var avail="141+((cmpage.x2-235)/7)";
-    oM.menuPlacement=new Array(152,avail+"-1",avail+"*2-15",avail+"*3-12",avail+"*4-7",avail+"*5-9",avail+"*6+5");

Indlejringen af den dynamiske beregning af placeringen (i oM.menuPlacement) ligger i, at x-koordinaten for de sidste seks menupunkter er angivet som strenge indeholdende formlerne, f.eks. ”141+((cmpage.x2-235)/7)*2+15". Ved andre bredder end fullscreen virker beregningen bare ikke.

Mit eget forslag ser således ud:

var q;
if (cmpage.x2<800)
{
q="25";
}
else
{
q="(cmpage.x2-800)/2+15";
}
var r="114";
oM.menuPlacement=new Array(q,q+"+"+r,q+"+2*"+r,q+"+3*"+r,q+"+4*"+r,q+"+5*"+r,q+"+6*"+r,q+"+7*"+r)

Dette virker også, så længe browservinduet er større end tabelbredden (800). Det virker sådan set også ved vinduesbredder mindre end 800, men i skiftet hen over grænsen skal jeg opdatere siden manuelt. Dette skyldes indlejringen, da if sætningen kun eksekveres når menuen loades. Hvis det problem skal løses, skal if sætningen også indlejres.

Og det er – efter en lang smøre – mit spørgsmål. Er der nogen der har et forslag til, hvordan dette skift (altså if sætningen) kan implementeres, eller ved om det er muligt at ændre opsætningen så coolmenus kan køre relativt i forhold til tabellen.

Uheldigvis er Thomas Brattli’s hjemmeside jo nede, så det er ikke muligt at finde hjælp den vej fra.

Mvh. og på forhånd tak.
Jens

PS. Jeg giver 200 point til et konstruktivt svar, der IKKE indebærer at vi skal skrotte det hele og starte forfra.
Avatar billede anton112 Nybegynder
08. december 2008 - 22:17 #1
Jeg lukker ned.
De er ikke nogen der har haft lyst til at give et svar...
Avatar billede ssv Nybegynder
10. december 2008 - 12:53 #2
Jeg tror ikke folk ikke har lyst, men din menu ser meget kompliceret ud. Jeg ville gerne hjælpe hvis jeg havde evnen til netop den menu-type, men det har jeg dog ikke.

Hvis du ikke kan overtales til at skifte menuen ud med en mere fleksibel kode, så kan jeg ikke rigtig hjælpe :-)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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