Avatar billede kovalt Nybegynder
26. oktober 2006 - 22:14 Der er 7 kommentarer og
1 løsning

Problem med scroll og onMouseOver

Hej alle sammen

Jeg har nedenstående script, som fungerer perfekt i Mozilla med som driller en del i IE. Når jeg scroller i min browser sker der noget forskydning, som gør at jeg ikke kan få min div til at forblive udfoldet. Den bliver således foldet ud ganske kort for blot at blive lukket igen.

Håber noget kan gennemsku scriptet.

var IE=document.all?true:false;
if(!IE)document.captureEvents(Event.mousemove)
document.onmousemove=mousepos;
var cury=0;
var curx=0;

function mousepos(e){
    if(IE){
        tmpy=event.clientY;
        tmpx=event.clientX;
    }else{
        tmpy=e.pageY;
        tmpx=e.pageX;
    }
    cury=tmpy;
    curx=tmpx;
}


tmpx1=0;
tmpx2=0;
tmpy1=0;
tmpx2=0;
tmpx1b=0;
tmpx2b=0;
tmpy1b=0;
tmpx2b=0;
tmpcurnode="";

function hideshowdiv(tmpid,tmpcur,pleft,ptop){
    if(tmpid=document.getElementById(tmpid)){
        if(tmpcurnode!="")tmpcurnode.style.visibility='hidden';
            tmpcurnode=tmpid;
           
            xleft=tmpcur.offsetLeft;
            xtop=tmpcur.offsetTop;
            tmpcur2=tmpcur;
            while(tmpcur2=tmpcur2.offsetParent){
                xleft=xleft+tmpcur2.offsetLeft;
                xtop=xtop+tmpcur2.offsetTop;
            }
   
            tmpy1b=xtop;
            tmpx1b=xleft;
            tmpy2b=xtop+tmpcur.offsetHeight;
            tmpx2b=xleft+tmpcur.offsetWidth;
           
            tmpid.style.top=xtop+ptop+"px";
            tmpid.style.left=xleft+pleft+"px";
           
            tmpid.style.visibility='visible';
            tmpy1=tmpid.offsetTop;
            tmpx1=tmpid.offsetLeft;
            tmpy2=tmpid.offsetTop+tmpid.offsetHeight;
            tmpx2=tmpid.offsetLeft+tmpid.offsetWidth;
        }
    }

window.onload=runhidectrl;

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";
            }
        }
    }
setTimeout("runhidectrl();",100);
}

/Kovalt
Avatar billede kovalt Nybegynder
26. oktober 2006 - 22:17 #1
hvis jeg uskriver

alert('cury: '+ cury +' curx: '+ curx);

kan jeg se at koordinaterne for det samme punkt på skærmen ændrer sig ved scroll. Hvordan kan jeg ændre dette således at mine ykoordinater forbliver de samme ved scroll.
Avatar billede jhe-ting Nybegynder
26. oktober 2006 - 23:51 #2
For at korrigere for scroll kan du bruge 'scrollTop' og 'scrollLeft' værdierne fra 'event.srcElement'
Avatar billede olebole Juniormester
27. oktober 2006 - 11:18 #3
<ole>

- men om du skal bruge document.body.scrollTop eller document.documentElement.scrollTop kommer anpå, hvad du iøvrigt skriver i dokumentet ... ikke mindst før dit <html>-tag  ;o)

/mvh
</bole>
Avatar billede kovalt Nybegynder
27. oktober 2006 - 15:11 #4
document.body.scrollTop gjorde tricket.

Smider i et svar?
Avatar billede kovalt Nybegynder
27. oktober 2006 - 15:16 #5
Så virker det dog ikke i Mozilla - men det kan et browser-tjek jo fikse.

Er dette måden at gøre dette på:

if (navigator.appName == "Microsoft Internet Explorer")

eller findes der bedre måder?
Avatar billede jhe-ting Nybegynder
27. oktober 2006 - 17:31 #6
I den viste kode vil 'event.srcElement' netop være 'document.body'.
Avatar billede olebole Juniormester
30. oktober 2006 - 09:52 #7
Løsningen er nok, du bruger en fuld DTD (DocType Definition). Så skal du bruge samme kode i IE og FF - ligesom du pludselig skal bruge samme CSS i begge browsere. Bruger du inge DTD - eller en ufuldstændig DTD - disabler du nemlig store og væsentlige dele af CSS i IE6  ;o)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnie60/html/cssenhancements.asp

Læs under: The !DOCTYPE "Switch"
Avatar billede jhe-ting Nybegynder
24. november 2006 - 20:07 #8
Har du fundet en løsning kovalt?

Det anbefalses flere steder ikke at bruge navigator til at vælge, fordi mange browsere lyver.

Brug hellere feature-detect metoden som vist her:

function mousepos(e){
    if(event) e = event;
    tmpy=e.pageY;
    tmpx=e.pageX;
    cury=tmpy;
    curx=tmpx;
}
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