Avatar billede krogstrup Nybegynder
16. juli 2005 - 01:55 Der er 28 kommentarer

Problemer med at aflæse placering af DIV i IE

Jeg bruger nedenstående script (som olebole har lavet) til at finde toppen (y) af en given DIV på min side.

function getPos(elm) {
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
}

I FF returneres ganske rigtigt min DIVs top position i browserens indre område. Men i IE udregnes top positionen udfra selve toppen af browseren.

Hvordan kan scriptet omskrives således at jeg også i IE får en korrekt aflæsning af en DIVs top ?
Avatar billede roenving Novice
16. juli 2005 - 10:18 #1
No comprende ...

-- jeg har aldrig haft problemer med jumpers lille fikse funktion, men den leverer jo altså positionen i forhold til det yderste element i det aktuelle dokument/vindue !-)
Avatar billede krogstrup Nybegynder
16. juli 2005 - 10:28 #2
ok - men kan den omskrives så den i alle browsere (læs: IE + FF) aflæser positionen i forhold til hvor selve BODY elementet starter i browservinduet, og ikke hvor f.eks. browserens titellinie begynder i toppen af skærmen ?
Avatar billede krogstrup Nybegynder
16. juli 2005 - 10:35 #3
Du kan se mit problem her:
http://fisker.wkh.dk/1/1/velkomst.html

På siden returneres 283 i IE, men der burde aflæses 156 som FF ganske rigtigt gør.

Hvorfor er der forskel på aflæsningen i IE og FF i dette tilfælde? Skyldes det at jeg har programmeret siden uhensigtsmæssigt, eller kan scriptet omskrives til at tage højde for dette problem ?
Avatar billede roenving Novice
16. juli 2005 - 10:47 #4
Kunne du ikke lave en testside, hvor man ikke skulle lede en hel stribe scripts igennem for at se hvad du har lavet ?-)
Avatar billede krogstrup Nybegynder
16. juli 2005 - 10:55 #5
Jo, men det er dét der er mit problem. Hvis jeg bruger scriptet på en testside, aflæses y ganske ens i både IE og FF. Se her:
http://fisker.wkh.dk/test2.html

Men det aflæses ikke ens på min rigtige side ?!?
Avatar billede roenving Novice
16. juli 2005 - 10:58 #6
Så laver du altså et eller andet, som er væsentlig anderledes på den side ...

-- i hvilket script har du smidt testen ?-)
Avatar billede krogstrup Nybegynder
16. juli 2005 - 11:00 #7
Avatar billede krogstrup Nybegynder
16. juli 2005 - 11:01 #8
linie 171

function getPos(elm) {
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
}



linie 207

objDesign = document.getElementById("design");
    intTopPos = getPos(objDesign).y + 12
   
    alert(getPos(objDesign).y)
Avatar billede roenving Novice
16. juli 2005 - 11:07 #9
Jeg kan ikke i den kode finde noget, som skulle gøre en forskel, men jeg kender så heller ikke milonics menu så godt, at jeg kender opbygningen af elementerne, for der kan være noget ganske uventet, hvis den placerer sig anderledes end du og jeg forventer !-)
Avatar billede krogstrup Nybegynder
16. juli 2005 - 11:10 #10
Hmm, men umiddelbart kan det vel ikke have noget med milonic menuen at gøre.

Jeg laver jo en ganske "ren" aflæsning af y koordinatet for elementet "design" således:

objDesign = document.getElementById("design");
alert(getPos(objDesign).y);

men får alligevel forkert y koordinat i IE ?!?
Avatar billede krogstrup Nybegynder
16. juli 2005 - 11:13 #11
Nu har jeg smidt scriptet og aflæsningen direkte i bunden her:
http://fisker.wkh.dk/1/1/velkomst.html

Men stadig samme problem.... ?!?
Avatar billede roenving Novice
16. juli 2005 - 11:13 #12
Eneste grund, jeg kan tænke mig til, må være et element, som på tidspunktet ligger og fylder op ...
Avatar billede roenving Novice
16. juli 2005 - 11:18 #13
Prøv at indsætte det sådan:

<script type="text/javascript">
function getPos(elm) {
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
}

window.onload = function(){
objDesign = document.getElementById("design");
alert(getPos(objDesign).y);}
</script>
Avatar billede krogstrup Nybegynder
16. juli 2005 - 11:28 #14
Hmm, har vist heller ikke noget med det at gøre...

Prøv at kigge på kildekoden nu:
http://fisker.wkh.dk/1/1/velkomst.html

Har barberet den ned til minimum.
Avatar billede krogstrup Nybegynder
16. juli 2005 - 11:29 #15
Hvis jeg fjerner mit CSS i STYLE sektionen i toppen af siden, aflæses der korrekt ?!?
Avatar billede roenving Novice
16. juli 2005 - 11:35 #16
Hrm, html, body height ?-)

Tænke, tænke ...
Avatar billede krogstrup Nybegynder
16. juli 2005 - 11:52 #17
Prøv at kigge nu:
http://fisker.wkh.dk/1/1/velkomst.html

Aflæsningen af DIV i tabel går galt i IE, men ikke den DIV jeg har sat udenfor min TABLE ?!?
Avatar billede roenving Novice
16. juli 2005 - 12:03 #18
Jeg får også skøre resultater, hvis jeg indsætter positionering i både tabel, række og celle, nemlig en korrekt aflæsning, men placering af tingesten helt i top ...

-- så det har altså noget med tabellen at gøre ...
Avatar billede krogstrup Nybegynder
16. juli 2005 - 12:21 #19
Yes - nu er det lykkedes mig at få siden til at vise forkert aflæsning af y koordinat for min DIV i TABLE i både IE og FF

jeg fatter nada....

http://fisker.wkh.dk/1/1/velkomst.html
Avatar billede olebole Juniormester
17. juli 2005 - 19:41 #20
<ole>

<div class="spacer" id="spacer" style="font-size:0;line-height:0">&nbsp;</div>

- does the trick  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
17. juli 2005 - 19:42 #21
- du kan ikke sætte et divs højde til noget mindre end højden at et indeholdt tegn  :)
Avatar billede olebole Juniormester
17. juli 2005 - 19:45 #22
- og de inline-styles, jeg skriver i divet, bør du naturligvis lægge ind under klassen 'spacer'  :)
Avatar billede olebole Juniormester
17. juli 2005 - 20:09 #23
- eller har jeg misforstået noget?  :)
Avatar billede krogstrup Nybegynder
17. juli 2005 - 20:58 #24
hej ole

når du kigger på test sitet er det ikke længere det samme kode eksempel som jeg arbejde på i går. Du har dog ganske ret i din pointe med at min spacer kun kan sættes til 0px hvis man bruger dit "hack".

Men mit grundlæggende problem var at jeg havde puttet min design DIV ind i en tabel for at centrere vertikalt. Men efter at have puttet min DIV ind i tabellen aflæste getPos() funktionen ikke længere min DIVs top og left koordinater korrekt.

Jeg har hentet en masse forskellige funktioner ned med formålet at aflæse en DIVs top og left, men alle fejler når DIV´en er placeret i en tabel.

?!?
Avatar billede krogstrup Nybegynder
17. juli 2005 - 20:59 #25
Derfor har jeg nu valgt en løsning hvor jeg scripter mig til en vertikal centrering fremfor den simple løsning med brug af tabel.
Avatar billede olebole Juniormester
17. juli 2005 - 21:43 #26
Hmmm ... det har jeg nu godt nok aldrig haft problemer med. Det må jeg prøve at forske lidt i. Men du må meget gerne vise et simpelt eksempel, der fejler - hvis du al'så gids  :)
Avatar billede krogstrup Nybegynder
17. juli 2005 - 22:24 #27
http://wkh.dk/getPos.htm

Jeg får følgende resultater:

IE
left - korrekt aflæsning
top - IKKE korrekt aflæsning

FF
left - korrekt aflæsning
top - korrekt aflæsning

Problemet opstår altså kun i IE.
Jeg bruger IE 6 på winXP pro med SP2
Avatar billede krogstrup Nybegynder
22. juli 2005 - 20:42 #28
Hej Ole

Har du haft tid til at kigge på mit test eksempel ?

/Krogen
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