13.8 Determining the Location of a Nonpositioned Element

NN 6, IE 5

13.8.1 Problem

You want to ascertain the pixel coordinates of an element that the browser has placed during normal page flow.

13.8.2 Solution

The following getElementPosition( ) function returns an object with properties for the left and top absolute coordinates of the element whose ID is passed as an argument:

function getElementPosition(elemID) {     var offsetTrail = document.getElementById(elemID);     var offsetLeft = 0;     var offsetTop = 0;     while (offsetTrail) {         offsetLeft += offsetTrail.offsetLeft;         offsetTop += offsetTrail.offsetTop;         offsetTrail = offsetTrail.offsetParent;     }     if (navigator.userAgent.indexOf("Mac") != -1 &&          typeof document.body.leftMargin != "undefined") {         offsetLeft += document.body.leftMargin;         offsetTop += document.body.topMargin;     }     return {left:offsetLeft, top:offsetTop}; }

This function is compatible with browsers that support W3C DOM element-referencing syntax.

13.8.3 Discussion

The typical purpose of establishing the absolute location of an element on the page is to position some other element on it or in relation to it. Because the location of inline elements can vary widely with the browser window size and font situation, the values need to be calculated after the page has loaded, is reflowed in response to other dynamic content additions and deletions, or the window is resized.

Although some browser versions report the accurate value simply via the offsetLeft and offsetTop properties of an element, others require the addition of any offsets imposed by parent elements offering positioning contexts (the element indicated by the offsetParent property). Therefore, this function includes a loop that iterates through the offsetParent hierarchy of the element passed as an argument to the function, accumulating additional coordinate offsets if they exist.

This function is not needed for CSS-type absolute-positioned elements because you can obtain the correct coordinates directly via the style.left and style.top properties (or via the effective style property, as retrieved through the script shown in Recipe 11.12).

13.8.4 See Also

Recipe 11.12 for reading initial style properties set in <style> and <link> tags.



JavaScript & DHTML Cookbook
JavaScript & DHTML Cookbook (2nd edition)
ISBN: 0596514085
EAN: 2147483647
Year: 2005
Pages: 249
Authors: Danny Goodman

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net