04. april 2006 - 16:51Der er
86 kommentarer og 1 løsning
Dropdown menu med .jpg billede?
Hej ..
Er ny her inde på exp.dk, så ved ikke lige om det er puttet i den rigtige kategori.
Men, har en hjemmeside, hvor jeg gerne vil have en vandret dropdown menu. Har prøvet at lure nogle forskellige post herinde, og set forskellige dropdownmenuer. Men jeg synes ikke lige at det er det jeg skal bruge.
Noget i denne stil? ... rediger selv de div's der dukker op (billeder, links, bredde m.v.) placeringen er samme sted som billedet der dukker frem...
onmouseover="hideshowdiv('menu2',this,0,50);"
menu2 = det objekt der skal dukke frem , this er en reference til den der kalder menuen frem ( bruges til placering), 0 <- + / - for at flytte menuen højre/venstre , 50 <- + / - for at flytte den ned eller op...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>
<script type="text/javascript"> <!--
var IE=document.all?true:false; if(!IE)document.captureEvents(Event.mousemove) document.onmousemove=mousepos; var cury=0; var curx=0;
function hideshowdiv(tmpid,tmpcur,pleft,ptop){ if(tmpid=document.getElementById(tmpid)){ if(tmpcurnode!="")tmpcurnode.style.visibility='hidden'; tmpcurnode=tmpid;
... der er også i forklaringen en rettelse til scriptet så den automatisk placerer menuen lige under den knap man kører henover så er man fri for at definerere placeringen via. de 2 variabler :)
Men ellers så mener jeg at det er det jeg skal bruge, så hvis du kan fortælle det jeg spurgte om før, og fortælle mig hvordan du får de der point så er det vidst det ;p
^ du definerer width og height i den boks der skal dukke op som her - hvis du ikke gør udvider den sig selv så størrelsen passer til indholdet ligesom normale div's ikke noget specielt indviklet... da det indstilles automatisk for hver dropdown behøver man egentlig ikke at bekymre sig om det - det er bare om at putte noget indhold ind :)
... vil du lige have udvidelsen så den selv placerer menuen nedenunder knappen? - sammen med forklaringen på scriptet ?
så laver du dropdown f.eks. knappen sådan her: <a href="link"><img src="1.jpg" width="100" height="100" onmouseover="hideshowdiv('menu2',this,0,50);"></a>
- og links i dropdownen definerer du bare ligesom i eksemplet 05/04-2006 17:58:35 - du skriver bare normale links...
Rettelser hvis menuen skal dukke op lige under billedet:
function hideshow skal erstattes med denne:
function hideshowdiv(tmpid,tmpcur,pleft,ptop){ if(tmpid=document.getElementById(tmpid)){ if(tmpcurnode!="")tmpcurnode.style.visibility='hidden'; tmpcurnode=tmpid;
onmouseover="hideshowdiv('menu1',this,0,0);" ^ for placerin ovenpå objektet der kaldte tingen frem
- (+1 / -1 eller mere istedet for første 0 rykker tingen ned / op i forhold til objektet der kaldte tingen frem)
- (+1 / -1 eller mere istedet for andet 0 rykker tingen højre / venstre i forhold til objektet der kaldte tingen frem)
onmouseover="hideshowdiv('menu1',this,'d','d'); ^ for at dukke op lige under det objektet der kaldte tingen frem (i stil med dropdown menuer)
.......................................................................................... Her er forklaringen til det nye script (ovenstående rettelser er ikke med i det nedenstående)
<script type="text/javascript"> <!--
/* Kontrollerer hvilken browser det er */ /* Bruges til kontrol af positionen af musen */
var IE=document.all?true:false; if(!IE)document.captureEvents(Event.mousemove) document.onmousemove=mousepos; var cury=0; var curx=0;
/* tmpcurnode bruges som holder til hvilken menu der er / eller sidst var åben */ tmpcurnode=tmpid;
/* Bruges til at fange den absolutte placering af det tag der aktiverede funktionen */ xleft=tmpcur.offsetLeft; xtop=tmpcur.offsetTop; tmpcur2=tmpcur; while(tmpcur2=tmpcur2.offsetParent){ xleft=xleft+tmpcur2.offsetLeft; xtop=xtop+tmpcur2.offsetTop; }
/* Opbevarer den absolutte placering af det tag der aktiverede funktionen */ /* af hensyn til at kontrollere hvornår musen kommer uden til dette område */ tmpy1b=xtop; tmpx1b=xleft; tmpy2b=xtop+tmpcur.offsetHeight; tmpx2b=xleft+tmpcur.offsetWidth;
/* Placerer det objekt der skal dukke frem ud for det objekt der lavede kaldet til menuen */ /* samt nogle pixel over/under til højre/venstre for afhængig af opkaldet til funktionen */ tmpid.style.top=xtop+ptop+"px"; tmpid.style.left=xleft+pleft+"px";
/* Fremviser objektet der skal vises samt opbevarer den absolutte placering af objektet */ /* af hensyn til at kontrollere hvornår musen kommer uden til dette område */ tmpid.style.visibility='visible'; tmpy1=tmpid.offsetTop; tmpx1=tmpid.offsetLeft; tmpy2=tmpid.offsetTop+tmpid.offsetHeight; tmpx2=tmpid.offsetLeft+tmpid.offsetWidth; } }
/* Aktiverer kontrol af musens position */ window.onload=runhidectrl;
/* Kontrollerer om musens position er uden for området til et object der */ /* vises og om musen også er uden til det object der kaldte menuen frem */ /* hvis det er tilfældet skjules det objekt der p.t. er synligt */
function runhidectrl(){ if(tmpcurnode!=""){ if((curx<tmpx1)||(curx>tmpx2)||(cury<tmpy1)||(cury>tmpy2)){ if((curx<tmpx1b)||(curx>tmpx2b)||(cury<tmpy1b)||(cury>tmpy2b)){ tmpcurnode.style.visibility="hidden"; } } }
/* Antal ms der skal gå mellem hver kontrol af om man er kommet uden til de */ /* nævnte områder ... jo lavere tal - desto hurtigere lukker menuen og modsat */ setTimeout("runhidectrl();",100); }
.................................................... <img src="1.jpg" width="100" height="100" onmouseover="hideshowdiv('menu1',this,0,0);"> ^ Denne vil fremvise et object med id="menu1" direkte ovenpå sig selv
<img src="1.jpg" width="100" height="100" onmouseover="hideshowdiv('menu1',this,0,50);"> ^ Denne vil fremvise et object med id="menu1" 50px under sig selv
('menu1',---------------this,--------------0,-------------------------------50) ^object der skal vises, ^kontrol variabel, ^+/- antal px højre/venstre for ,^ +/- antal px under/over for
<div id="menu1" style="visibility:hidden;position:absolute;top:0px;left:0px;width:200px;"> <img src="1.jpg" width="100" height="100"><br> </div> ^ objectet der vises/skjules behøver ikke være en div, kan være alle objekter med et id! ... objektets interne opbygning er irrelevant men style="visibility:hidden;position:absolute;top:0px;left:0px;" er vigtig ;)
der var lige en fejl i beskrivelsen :P - (+1 / -1 eller mere istedet for første 0 rykker tingen ned / op (forkert højre og venstre) i forhold til objektet der kaldte tingen frem)
- (+1 / -1 eller mere istedet for andet 0 rykker tingen højre / venstre (forkert ned og op) i forhold til objektet der kaldte tingen frem)
så er det noget i denne stil (rettet til det nye script): prøv evt at definere width:ypx; hvor y angiver hvor bred dropdownen skal være i menu1 / menu2 i bunden...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>
<script type="text/javascript"> <!--
var IE=document.all?true:false; if(!IE)document.captureEvents(Event.mousemove) document.onmousemove=mousepos; var cury=0; var curx=0;
function hideshowdiv(tmpid,tmpcur,pleft,ptop){ if(tmpid=document.getElementById(tmpid)){ if(tmpcurnode!="")tmpcurnode.style.visibility='hidden'; tmpcurnode=tmpid;
og hvis du putter <br> imellem linksene hopper de ned på næste linje ... det kan jo også være tekst link kort sagt alt html... der er ingen grænser for hvad du kan putte i de div's der skal fremvises...
... skal alle menuer have dem samme bredde og starte nedenunder link nr 1? - i det tilfælde scripter jeg lige scriptet om så det passer til den dropdown måde...
- i det tilfælde scripter jeg lige scriptet om så det passer til den dropdown måde... ... eller rettere i det tilfælde skal denne linie:
tmpid.style.left=xleft+"px";
erstattes med:
tmpid.style.left=xleft-tmpcur.offsetLeft+"px";
og du skal angive bredden af den div der dukker op i hvert div som f.eks. her: <div id="menu1" style="visibility:hidden;position:absolute;top:0px;left:0px;width:500px;">
Men hvis jeg så vil have menu2 til at gå ind over den første "knap" ? så der er et link under første knap? :) - så bruger du rettelsen i 05/04-2006 18:29:36 sammen med eksemplet fra 05/04-2006 18:16:40...
Men der er vel en forskel når man putter billeder osv ind ik?> Forskellen på script 1(udvidet) og så med den sidste rettelse er at alle menuer dukker op lige under starten på div'en d.v.s. der hvor den div starter som linksene er placeret i...
- kan selvfølgelig godt komme med en eksempel der matcher det site du fremviser, men det kan ikke gøres (kan godt men for besværligt) baseret på et billede - lettere baseret på html tags og struktur ... et link til siden delt op i html vil gøre det lettere at komme med et kopier og sæt ind test eksempel
p.s. sørg for at knapperne til menuen får sin egen div med position relative uden noget foran den første knap... ellers starter den ikke under den første knap :)
bookmark tråaden ;) ... ellers prøv med et nyt spørgsmål* eller klik på mit brugernavn og kast en besked med henvisning til denne tråd i en tråd du kan se jeg deltager i...
* bemærk dog ved en ny tråd et det ikke tilladt at stille spørgsmål specifikt til én eller flere bestemte personer, med mindre spørgsmålet er på 0 point eller hvis der er tale om lovlig pointoverførsel.
eller evt. skrive til dig hvis du har en mail ? - har desværre været hårdt ramt af spam-emails derfor ligger den ikke tilgængelig på offentlige forummer... og holder derfor min e-mail adresse tæt til kroppen.
- kunne selvfølgelig oprette en hotmail eller lignende men det er ikke det at få spam der er et problem det er det tralse i at skulle til at sortere det fra...
se evt. regler under: http://www.eksperten.dk/regler.phtml (del 2. m.h.t. oprettelse af tråde... det ville jo ikke være fair hvis det var en tråd hvor andre ikke havde mulighed for at få point ...)
... nå men et hutigt fix ... kigger videre på det - der er lidt med at menuen ikke forsvinder optimalt når man kører musen ned under menuen ( det kigger jeg på sammen med en måde at få scroll placering uden at ændre doctypen...) men så du kan se der sker lidt så prøv at skifte doctype til den første jeg nævnte samt udskifte det stykke her:
function hideshowdiv(tmpid,tmpcur,pleft,ptop){ if(tmpid=document.getElementById(tmpid)){ if(tmpcurnode!="")tmpcurnode.style.visibility='hidden'; tmpcurnode=tmpid;
der er stadig lidt problemer med at menuen ikke forsvinder godt nok - kigger på det imorgen og kommer med en løsning på det sidste samt en dump af html'en som den skal se ud 7-9-13 ... det var det med doctypen der drillede før :/ http://javascript.about.com/library/bliebug.htm
test eksempel ;) - hjælper gerne med at integrere i løbet af imorgen eller måske først til aften hvis det er :) ... men nu vil jeg lige først sove ;D
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>
<style type="text/css"> html,body{margin:0px;padding:0px;} a img{border:0px;} </style>
<script type="text/javascript"> <!--
var IE=document.all?true:false; if(!IE)document.captureEvents(Event.mousemove) document.onmousemove=mousepos; var cury=0; var curx=0;
function hideshowdiv(tmpid,tmpcur,pleft,ptop){ if(tmpid=document.getElementById(tmpid)){ if(tmpcurnode!="")tmpcurnode.style.visibility='hidden'; tmpcurnode=tmpid;
Med scriptet ovenover er problemet med at menuerne ikke forsvinder løst på sider uden frames... kigger på frame problemet... Problemet med at menuen blinker er dog løst (kopier fra <script... ned til ...</script> og erstat ) :)
sagde du ik at menu1's position altid sku være relative ? altså den fungere fint nok nu selvom det er absolute, men skal bare lige være sikker..>
Nej den skal være absolute... Det var knappen der kalder menupunktet frem der "helst" skal være relativt placeret... (ved ikke helt om det giver problemer hvis den ikke er (har ikke testet)..
Okay, jeg fik ikke rigtig det med de der iframes til at virke :s> - kigger lige på dit site ...
Jamen tror det er selve background-imagen som er noget galt med? ;s fordi også i frontpage vil den ikke vises nu, og der burde det først og fremmest blive vist? :D
du havde angivet en sti som denne ved en af filerne: dropdown%20menu%20jpgs/dropdownm-1.jpg ... og det kunne være det hjalp med - eller _ istedet for mellemrum (%20) i direktoratets navn... men det var den url('') jeg glemte ;) [ Mange tak - endnu en gang ;D ] - det var så lidt ;)
Synes godt om
Ny brugerNybegynder
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.