offsetLeft只是获得与上层对象的值,我想获得当前对象与窗口的距离要怎么搞?用parentNode也不好,谁知道有多少层关系呢?有没有对应的属性可以获得?请教高人指点

解决方案 »

  1.   

    http://blog.csdn.net/natineprince/archive/2009/04/30/4138260.aspx
      

  2.   

    function viewportOffset(elem){
    var top = 0, left = 0;
    do {
    top += elem.offsetTop || 0;
    left += elem.offsetLeft || 0;
    if (currentStyle(elem).position == 'absolute') break;
    if (elem === document.body) {
    top -= elem.scrollTop || 0;
    left -= elem.scrollLeft || 0;
    }
    } while (elem = elem.offsetParent);

    return {
    left: left,
    top: top
    };
    }
      

  3.   

    var currentStyle = function(element){
    return element.currentStyle || document.defaultView.getComputedStyle(element, null);
    }
      

  4.   


    <style type="text/css">
    .t{line-height:40px;width:200px; border:10px solid; margin-top:900px; margin-left:500px;}
    </style>
    <div class="t" id="t"></div>
    <script>
    var o = document.getElementById("t");var rect = o.getBoundingClientRect();//返回一个TextRectangle对象,包含left, top, right和bottom几个只读属性,以px为单位来表示边界框相对视窗左上角的位置。
    var iLeft1 = rect.left +  document.documentElement.scrollLeft, iTop1 = rect.top +  document.documentElement.scrollTop;var iLeft2 = o.offsetLeft, iTop2 = o.offsetTop;
    while (o.offsetParent) { o = o.offsetParent; iLeft2 += o.offsetLeft; iTop2 += o.offsetTop; }alert(iLeft1+"_"+iLeft2)
    alert(iTop1+"_"+iTop2)
    </script>
    两种方法
      

  5.   

    二楼的elem.offsetTop || 0;这句后面的||0是什么意思来着?菜鸟请教了
    程序报错哦
      

  6.   

    厉害厉害,我都没见过getBoundingClientRect();这个方法,真是孤陋寡闻了