/ JTricks.com
/ Building Blocks
/ Absolutely-positioned DIVs moving
                        
                        Last updated: 03 Oct 2008
Absolutely-positioned DIVs moving
Absolutely-positioned DIV tags can be used to make your
web page more dynamic without too much effort. However since the browsers
generally render html of the web page differently, it might be difficult to position
the DIV adequately.
The sample presented here will allow you to place an absolutely-positioned
DIV attached to other page element.
Script demonstration
Script source code
To use the script perform the following steps:- Have absolutely-positioned 
DIVon the page. If you want it to appear directly on the target place, have it with styledisplay:none. - Insert the following code somewhere on the page (or put in separate file and reference it):
 
<script type="text/javascript"><!--
/* Script by: www.jtricks.com
 * Version: 20081003
 * Latest version:
 * www.jtricks.com/javascript/blocks/moving.html
 */
function attachAbsoluteBox(an, box, shift_x, shift_y)
{
    var cleft = 0;
    var ctop = 0;
    var obj = typeof an == 'object' 
        ? an : document.getElementById(an);
    var att = typeof box == 'object'
        ? box : document.getElementById(box);
    while (obj.offsetParent)
    {
        cleft += obj.offsetLeft;
        ctop += obj.offsetTop;
        obj = obj.offsetParent;
    }
    att.style.left = (cleft + shift_x) + 'px';
    // Handle Internet Explorer body margins,
    // which affect normal document, but not
    // absolute-positioned stuff.
    if (document.body.currentStyle &&
        document.body.currentStyle['marginTop'])
    {
        ctop += parseInt(
            document.body.currentStyle['marginTop']);
    }
    att.style.top = (ctop + shift_y) + 'px';
    att.style.display = 'block';
}
//--></script>
- Use 
attachAbsoluteBox()function with with the object or its id to attach to,DIVobject or its id to move and shifts on the x and y axis from the object's top left corner. For example: 
<button 
    id="button1"
    onclick="attachAbsoluteBox('button1', 'div1', 0, 0)">
        Attach to this button with x, y shifts = 0
</button>
or
<button
    id="button2"
    onclick="attachAbsoluteBox(document.getElementById('button2'),
                 document.getElementById('div1'), 10, 50)">
        Attach to this button with x shift = 10, y shift = 50
</button>
- Be sure to verify page design with the Javascript turned off.
 
Browser compatibility
The javascript snippet above was tested on the following user agents:| Mozilla | Firefox 3.0.x | Ok. | 
| Firefox 2.0.x | Ok. | |
| Firefox 1.5 | Ok. | |
| Firefox 1.0.x | Ok. | |
| Microsoft | Internet Explorer 7.0 | Ok. | 
| Internet Explorer 6.0 | Ok. | |
| Internet Explorer 5.0 | Ok. | |
| Opera | Opera 9.x | Ok. | 
| Opera 8.x | Ok. | |
| KHTML | Safari 3.1.2 for Windows | Ok. | 
| Konqueror 3.5.5 | Ok. | |
| No Javascript or Javascript turned off  | 
Any | Downgrades gracefully *. | 
*: Graceful degradation means the
DIV will appear in it initial place if it was visible and
will not be shown if it was initially invisible.