用過jQuery的offset()的同學都知道
offset().top或offset().left很方便地取得元素相對於整個頁面的偏移。
而在js里,沒有這樣直接的方法,節點的屬性offsetTop可以獲得該節點相對於父節點的相對偏移
但不能直接獲得其絕對偏移,我們可用節點逐層遞歸向上來相加offsetTop來獲得絕對偏移。
function getOffset(Node, offset) { if (!offset) { offset = {}; offset.top = 0; offset.left = 0; } if (Node == document.body) {//當該節點為body節點時,結束遞歸 return offset; } offset.top += Node.offsetTop; offset.left += Node.offsetLeft; return getOffset(Node.parentNode, offset);//向上累加offset里的值 }
使用時,則如:
var a = document.getElementById('a'); //getOffset(a).top //getOffset(a).left