Avatar billede kjoelby Nybegynder
30. december 2002 - 16:56 Der er 12 kommentarer og
1 løsning

Pop-it menu : (200 point) Kan man sætte en "margen" på popup

Kan man sætte en bestemt afstand fra venstre side af cellen i en tabel til venstre side af popup cellen, således at popup`n ikke dækker over teksten/linket. 
Her er hele menuen:
<html>
<head>

<style>
<!--

.menuskin{
position:absolute;
width:165px;
background-color:menu;
border:2px solid black;
font:normal 12px Verdana;
line-height:18px;
z-index:100;
visibility:hidden;
}

.menuskin a{
text-decoration:none;
color:black;
padding-left:10px;
padding-right:10px;
}

#mouseoverstyle{
background-color:highlight;
}

#mouseoverstyle a{
color:white;
}
-->
</style>

<script language="JavaScript1.2">

//Pop-it menu- By Dynamic Drive
//For full source code and more DHTML scripts, visit http://www.dynamicdrive.com
//This credit MUST stay intact for use

var linkset=new Array()
//SPECIFY MENU SETS AND THEIR LINKS. FOLLOW SYNTAX LAID OUT

linkset[0]='<div class="menuitems"><a href="http://dynamicdrive.com">Dynamic Drive</a></div>'
linkset[0]+='<div class="menuitems"><a href="http://javascriptkit.com">JavaScript Kit</a></div>'
linkset[0]+='<div class="menuitems"><a href="http://freewarejava.com">Freewarejava</a></div>'

linkset[1]='<div class="menuitems"><a href="http://msnbc.com">MSNBC</a></div>'
linkset[1]+='<div class="menuitems"><a href="http://cnn.com">CNN</a></div>'
linkset[1]+='<div class="menuitems"><a href="http://abcnews.com">ABC News</a></div>'
linkset[1]+='<div class="menuitems"><a href="http://www.washingtonpost.com">Washington Post</a></div>'

////No need to edit beyond here

var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1
var ns6=document.getElementById&&!document.all
var ns4=document.layers

function showmenu(e,which){

if (!document.all&&!document.getElementById&&!document.layers)
return

clearhidemenu()

menuobj=ie4? document.all.popmenu : ns6? document.getElementById("popmenu") : ns4? document.popmenu : ""
menuobj.thestyle=(ie4||ns6)? menuobj.style : menuobj

if (ie4||ns6)
menuobj.innerHTML=which
else{
menuobj.document.write('<layer name=gui bgColor=#E6E6E6 width=165 onmouseover="clearhidemenu()" onmouseout="hidemenu()">'+which+'</layer>')
menuobj.document.close()
}

menuobj.contentwidth=(ie4||ns6)? menuobj.offsetWidth : menuobj.document.gui.document.width
menuobj.contentheight=(ie4||ns6)? menuobj.offsetHeight : menuobj.document.gui.document.height
eventX=ie4? event.clientX : ns6? e.clientX : e.x
eventY=ie4? event.clientY : ns6? e.clientY : e.y

//Find out how close the mouse is to the corner of the window
var rightedge=ie4? document.body.clientWidth-eventX : window.innerWidth-eventX
var bottomedge=ie4? document.body.clientHeight-eventY : window.innerHeight-eventY

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<menuobj.contentwidth)
//move the horizontal position of the menu to the left by it's width
menuobj.thestyle.left=ie4? document.body.scrollLeft+eventX-menuobj.contentwidth : ns6? window.pageXOffset+eventX-menuobj.contentwidth : eventX-menuobj.contentwidth
else
//position the horizontal position of the menu where the mouse was clicked
menuobj.thestyle.left=ie4? document.body.scrollLeft+eventX : ns6? window.pageXOffset+eventX : eventX

//same concept with the vertical position
if (bottomedge<menuobj.contentheight)
menuobj.thestyle.top=ie4? document.body.scrollTop+eventY-menuobj.contentheight : ns6? window.pageYOffset+eventY-menuobj.contentheight : eventY-menuobj.contentheight
else
menuobj.thestyle.top=ie4? document.body.scrollTop+event.clientY : ns6? window.pageYOffset+eventY : eventY
menuobj.thestyle.visibility="visible"
return false
}

function contains_ns6(a, b) {
//Determines if 1 element in contained in another- by Brainjar.com
while (b.parentNode)
if ((b = b.parentNode) == a)
return true;
return false;
}

function hidemenu(){
if (window.menuobj)
menuobj.thestyle.visibility=(ie4||ns6)? "hidden" : "hide"
}

function dynamichide(e){
if (ie4&&!menuobj.contains(e.toElement))
hidemenu()
else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
hidemenu()
}

function delayhidemenu(){
if (ie4||ns6||ns4)
delayhide=setTimeout("hidemenu()",500)
}

function clearhidemenu(){
if (window.delayhide)
clearTimeout(delayhide)
}

function highlightmenu(e,state){
if (document.all)
source_el=event.srcElement
else if (document.getElementById)
source_el=e.target
if (source_el.className=="menuitems"){
source_el.id=(state=="on")? "mouseoverstyle" : ""
}
else{
while(source_el.id!="popmenu"){
source_el=document.getElementById? source_el.parentNode : source_el.parentElement
if (source_el.className=="menuitems"){
source_el.id=(state=="on")? "mouseoverstyle" : ""
}
}
}
}

if (ie4||ns6)
document.onclick=hidemenu

</script>
</head>

<body bgcolor="#FFFFFF" text="#000000">
<div id="popmenu" class="menuskin" onMouseover="clearhidemenu();highlightmenu(event,'on')" onMouseout="highlightmenu(event,'off');dynamichide(event)">
</div>

<a href="#" onMouseover="showmenu(event,linkset[0])" onMouseout="delayhidemenu()">Webmaster Links</a><br>
<a href="#" onMouseover="showmenu(event,linkset[1])" onMouseout="delayhidemenu()">News sites</a>

</body>
</html>
Avatar billede Slettet bruger
31. december 2002 - 11:57 #1
Vil du gå med til noget, der kun virker i IE?
Avatar billede kjoelby Nybegynder
31. december 2002 - 13:22 #2
Ja det vil jeg gerne, bare det ikke ødelægger noget for de andre browser. :-)
Avatar billede Slettet bruger
01. januar 2003 - 18:29 #3
Jeg spørger, om du vil gå med til en løsning, der kun virker i IE. Underforstået at andre browsere ikke vil vise siden korrekt. :)
Avatar billede kjoelby Nybegynder
01. januar 2003 - 18:36 #4
Når du siger at andre browsere ikke vil vise siden korrekt, betyder det så at de ikke vil kunne bruge menu`n med de funktioner som den oprindeligt har !
Avatar billede Slettet bruger
02. januar 2003 - 13:50 #5
Prøv at erstatte dette:

eventX=ie4? event.clientX : ns6? e.clientX : e.x
eventY=ie4? event.clientY : ns6? e.clientY : e.y

... med dette:

eventX=ie4? event.srcElement.offsetX + event.srcElement.offsetWidth + 3 : ns6? e.clientX : e.x
eventY=ie4?  event.srcElement.offsetY + event.srcElement.offsetHeight + 3 : ns6? e.clientY : e.y

Så kan du jo selv bedømme, om det virker efter hensigten.
Hvis dine links kommer til at være i en side med tabeller eller en masse div-tags, skal scriptet muligvis lige udvides.
Avatar billede kjoelby Nybegynder
02. januar 2003 - 14:37 #6
Det virker ikke, du kan se på(Original script):http://www.gen.dk/menupop.asp--(Nyt script):http://www.gen.dk/menupop_2.asp. Som du kan se ligger den i tabeller.
Avatar billede Slettet bruger
02. januar 2003 - 14:46 #7
Avatar billede kjoelby Nybegynder
02. januar 2003 - 15:18 #8
Den er ikke helt god, den er lidt svær at fange. Hvad med at popup`n viser sig ved siden af markør,. Prøv at se en anden menu som er fed men jeg kan ikke få den til at fordele sig over flere kolonner: http://www.dynamicdrive.com/dynamicindex1/hvmenu/index.htm
Avatar billede Slettet bruger
02. januar 2003 - 17:19 #9
Se igen. Jeg har fjernet style="width: 100%" fra alle linksene for at få det til at fungere.
Avatar billede kjoelby Nybegynder
02. januar 2003 - 19:33 #10
Jeg siger mange tak, Hvis du har tid må du gerne se på spørgsmål: http://www.eksperten.dk/spm/299357
Avatar billede kjoelby Nybegynder
02. januar 2003 - 21:30 #11
Ups, der var lige et lille problem! den er ikke så god når man scroller: http://www.gen.dk/popit.asp
Avatar billede Slettet bruger
03. januar 2003 - 11:39 #12
Scroll-problemet skulle gerne være fikset nu!
Avatar billede kjoelby Nybegynder
03. januar 2003 - 12:33 #13
Perfekt,:-)) Hvad så med den her: http://www.eksperten.dk/spm/300431
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