[JavaScript] - Afstand van een DIV tot aan rand van venster

Pagina: 1
Acties:

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo!

Ik heb een <div> ergens in een tabel staan, die weer onderdeel is van een <div> (zoiets).

Nu wil ik graag van de eerstgenoemde DIV de afstand tot de bovenkant van het venster weten, zodat ik een ander div precies op hem kan laten aansluiten (een soort popup).

Ik probeer hierbij de offsetTop te gebruiken, maar die geeft waardes die nergens op slaan (of de waarde tot aan de rand van de offsetParent o.i.d.). Kan iemand mij eenduidig vertellen hoe ik de werkelijke afstand achterhaal?

Alvast mijn grote dank!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

de offsetTop waarden van de div en van al zijn parents bij elkaar optelllen :)

Intentionally left blank


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
ah!

Da's precies wat ik in gedachte had ... hiervoor de volgende 'loop' geschreven.

code:
1
2
3
4
5
6
7
8
9
var left = 0;
        
while ( typeof (obj.offsetParent) != 'undefined' ) {
        
    left += obj.offsetLeft;
            
    obj = obj.offsetParent;
        
}


Maar je zal altijd weer zien ... gaat dat )*%$#)-JavaScript weer zitten miepen 'NULL is null or not an object'.

Betekent dus dat die 'typeof()' statement niet goed zijn werk doet.

Suggesties?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

gewoon zoiets lijkt me:

JavaScript:
1
2
3
4
var left = 0;
do {
  left += obj.offsetLeft;
} while ((obj=obj.offsetParent) != document);

Intentionally left blank


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Helaas nog steeds gejammer ...

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
knutselmode:
code:
1
2
3
4
var left = 0;
do {
  left += obj.offsetLeft;
} while ((obj=obj.offsetParent) != null);


Zoiets misschien?

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Deze recursieve functie lijkt de oplossing te brengen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    function getRealDistance( obj, x, direction ) {
    
        var extra = 0;
    
        try {
        
            eval ('extra = obj.offset' + direction);
            
            x += extra;
            
            try {
            
                return getRealDistance(obj.offsetParent, x, direction);
                
            } catch (f) {
                
                return x;
            
            }
                        
        } catch (e) {
                
            return x;
            
        }
        
    } // end of function getRealLeft()

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

die eval is wel erg smerig; dit zou ook gewoon moeten werken:
JavaScript:
1
extra = obj['offset'+direction];

maar zijn er situaties waarbij je echt via offsetParent moet werken? Kan het niet gewoon via parentNode? offsetParent is volgens mij ook niet officieel onderdeel van de DOM.

[ Voor 14% gewijzigd door crisp op 06-09-2004 22:50 ]

Intentionally left blank

Pagina: 1