23. oktober 2004 - 22:46Der er
23 kommentarer og 1 løsning
HTML/js problem
Hey Eksperter,
Jeg ved ikke helt hvordan jeg skal beksrive problemet da det drejer sig om et par filer og lign. Men hvis man kigger på www.designstroke.dk/fixide/ så vil menuen ikke fungere som en dropdown, dog er alt koden iorden (så vidt jeg kan se) hvis man issolere menuen i sin egen html som her: www.designstroke.dk/fixide/test/ så er det intet problem.
for det første har du en fejl i dit preload-script. Du har først og fremmest skrevet newImage istedet for new Image, som det hedder. Desuden bruger du argumentet i new Image() til at definere dit billedes url. Det er dog ikke helt korrekt, for de argumenter du kan bruge i new Image() er kun bredden og højden af billedet. I stedet skal du skrive: pre_menu1_r = new Image(); pre_menu1_r.src = 'images/menu1_r.gif';
derfor bliver din funktion til: var preloadFlag = false; function preloadImages() { if (document.images) { pre_menu1_r = new Image(); pre_menu1_r.src = 'images/menu1_r.gif'; pre_menu2_r = new Image(); pre_menu2_r.src = 'images/menu2_r.gif'; pre_menu4_r = new Image(); pre_menu4_r.src = 'images/menu4_r.gif'; pre_menu3_r = new Image(); pre_menu3_r.src = 'images/menu3_r.gif'; pre_menu5_r = new Image(); pre_menu5_r.src = 'images/menu5_r.gif'; pre_menu6_r = new Image(); pre_menu6_r.src = 'images/menu6_r.gif'; preloadFlag = true; } }
Og så til det næste problem. Hvis du prøver at rette denne fejl vil du samtidig opdage at dine undermenuer ikke bliver placeret rigtigt. Dette skyldes at din offsetLeft og offsetTop i funktionen dropdown.showMenu = function() tager positionen fra venstre og toppen af den omkransende celle som menuen ligger i og ikke hele siden som det er tilfældet i din test-side. Heldigvis har en bruger her på eksperten (jumper var det vist), lavet en funktion til at beregne den rigtige position. Med den i baghånden kan vi rette den anden lille fejl: dropdown.showMenu = function() { pos = getPos(this); menu.style.left = pos.x + "px"; menu.style.top = pos.y + this.offsetHeight + "px"; menu.style.visibility = "visible"; currentMenu = menu; } } function getPos(elm) { for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent); return {x:zx,y:zy} }
har lige en anden ting. som du kan se så virker menuen ikke alt for godt endnu plus jeg ville gerne have den til at kunne lave menuknapper hvor der ikke er dropdown, er dette en meget stor sag eller er det noget du vil kunne klare hvis jeg opretter et nyt spørgsmål?
det første problem med menuen kan umiddelbart løses ved at slette den anden dropdown.onmouseover og sætte noget af den sammen med den første, så der kun står: dropdown.onmouseover = function() { if (currentMenu) { currentMenu.style.visibility = "hidden"; this.showMenu(); } else { this.showMenu(); } }
forresten kan det andet problem løses ved at lave en lille ny funktion til tomme dropdowns: function initializeMenuPunkt(dropdownId) { elm = document.getElementById(dropdownId); elm.onmouseover = function() { currentMenu.style.visibility = "hidden"; currentMenu = null; } }
Sættes bare efter getPos funktionen. Så kan du i HTML-koden skrive: <li class="menubar"><a href="#" id="ingendropdown" class="dropdown">Link</a></li> ... <li class="menubar"><a href="#" id="husdropdown" class="dropdown" accesskey="p">Hus</a>
og til sidst der hvor du laver dropdown-menuerne: function initMenu() { initializeMenu("husMenu", "husdropdown"); initializeMenu("HaveMenu", "Havedropdown"); initializeMenu("BlomsterMenu", "Blomsterdropdown"); initializeMenu("IndretningMenu", "Indretningdropdown"); initializeMenu("handvarkerMenu", "handvarkerdropdown"); initializeMenuPunkt("ingendropdown"); }
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.