Avatar billede karl-koder Nybegynder
24. januar 2008 - 21:26 Der er 6 kommentarer og
1 løsning

Mangler hjælp til delay af popupmenu

Hejsa,

Jeg har følgende javascript der håndtere en popup menu ved mouseover/mouseout :

var cX = 0;
var cY = 0;
var rX = 0;
var rY = 0;
function UpdateCursorPosition(e)
{
    cX = e.pageX; cY = e.pageY;
}

function UpdateCursorPositionDocAll(e)
{
    cX = event.clientX;
    cY = event.clientY;
}

if(document.all)
{
    document.onmousemove = UpdateCursorPositionDocAll;
}
else
{
    document.onmousemove = UpdateCursorPosition;
}

function AssignPosition(d)
{
    if(self.pageYOffset)
    {
        rX = self.pageXOffset;
        rY = self.pageYOffset;
    }
    else if(document.documentElement && document.documentElement.scrollTop)
    {
        rX = document.documentElement.scrollLeft;
        rY = document.documentElement.scrollTop;
    }
    else if(document.body)
    {
        rX = document.body.scrollLeft;
        rY = document.body.scrollTop;
    }
    if(document.all)
    {
        cX += rX;
        cY += rY;
    }
    d.style.left = (cX+0) + "px";
    d.style.top = (cY+0) + "px";
}

function HideContent(d)
{
    if(d.length < 1)
    {
        return;
    }
    document.getElementById(d).style.display = "none";
}

function ShowContent(d)
{
    if(d.length < 1)
    {
        return;
    }
    var dd = document.getElementById(d);
    AssignPosition(dd);
    dd.style.display = "block";
}

function ReverseContentDisplay(d)
{
    if(d.length < 1)
    {
        return;
    }
    var dd = document.getElementById(d);
    AssignPosition(dd);
    if(dd.style.display == "none")
    {
        dd.style.display = "block";
    }
    else
    {
        dd.style.display = "none";
    }
}

Det jeg skal ave lidt hjælp til er at når jeg føre musen henover f.eks et link så menuen popper er at jeg skal kunne føre musen henover menuen så jeg kan vælge en mulighed fra menuen. Altså skal der være en form for delay alá en dhtml menu.

Er der en af jer der kan hjælpe mig med det ?
Avatar billede karl-koder Nybegynder
24. januar 2008 - 22:08 #1
Jeg har forsøgt mig med en setTimeout :

function DelayContent(d)
{
    if(d.length < 1)
    {
        return;
    }
    setTimeout("HideContent('" + d + "')",300);
}

Men det gør bare et menuen forsvinder efter den tid der er defineret og menuen skulle jo helst forblive synlig når jeg føre musen henover ;o)
Avatar billede w13 Novice
25. januar 2008 - 11:30 #2
Skal delay content så ikke kun køres på onmouseout?
Avatar billede karl-koder Nybegynder
25. januar 2008 - 12:51 #3
Jo men det skal være selve menuen der først forsvinder når jag fjerner musen fra den
Avatar billede w13 Novice
25. januar 2008 - 12:53 #4
Ja. =) Det kan det jo sagtens være?

onmouseout="DelayContent('menuens-id')"
Avatar billede karl-koder Nybegynder
25. januar 2008 - 13:36 #5
Det har jeg prøvet og det hjalp ikke meget menuen forsvinder alligevel
Avatar billede karl-koder Nybegynder
25. januar 2008 - 13:46 #6
Måske jeg ikke har forklaret mig godt nok :

1. Når jeg føre musen henover et link skal der fremkomme en menu.

2. Når jeg bevæger musen væk fra dette link skal menuen forsvinde.

3. Hvis jeg flytter musen ned over menuen skal den forblive aktiv indtil jeg enten klikker på et link i menuen eller jeg fjerne musen fra den igen.

4. Med det jeg har forsøgt ovenfor kommer menuen når jeg føre musen henover et link og den forsvinder også igen når jeg fjerne musen. Men når jeg føre musen ned over menuen forsvinder den også selvom jeg beholder musen over menuen.

Håber det gav lidt mere mening ;o)
Avatar billede karl-koder Nybegynder
02. februar 2008 - 11:00 #7
Med følgende tilføjelser lykkedes det :

var timeout    = 300;
var closetimer    = 0;

function ShowContent(d)
{
    CancelClosetime();
    if(d.length < 1)
    {
        return;
    }
    clearTimeout(timeout_id);
    var dd = document.getElementById(d);
    AssignPosition(dd);
    dd.style.display = "block";
}

function CancelClosetime()
{
    if(closetimer)
    {
        window.clearTimeout(closetimer);
        closetimer = null;
    }
}

function Closetime(d)
{
    closetimer = window.setTimeout("HideContent('"+d+"')", timeout);
}

function HideContent(d)
{
    if(d.length < 1)
    {
        return;
    }
    document.getElementById(d).style.display = "none";
}

Bare hvis andre skulle have brug for det ;o)
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