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 }; }
var currentStyle = function(element){ return element.currentStyle || document.defaultView.getComputedStyle(element, null); }
<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> 两种方法
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
};
}
return element.currentStyle || document.defaultView.getComputedStyle(element, null);
}
<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>
两种方法
程序报错哦