如果HTML元素(DIV)的坐标没有被明确设置,我该如何从JavaScript中找到它们的XY坐标?
如果HTML元素(DIV)的坐标没有被明确设置,我该如何从JavaScript中找到它们的XY坐标?
这是我的做法:
// Based on: http://www.quirksmode.org/js/findpos.html
var getCumulativeOffset = function (obj) {
var left, top;
left = top = 0;
if (obj.offsetParent) {
do {
left += obj.offsetLeft;
top += obj.offsetTop;
} while (obj = obj.offsetParent);
}
return {
x : left,
y : top
};
};
这可能会因浏览器和版本而有所不同。我建议使用jQuery和positions插件。
myPos = findPos(document.getElementById('something'))
x = myPos[0]
y = myPos[1]
function findPos(obj) {
var curleft = curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft
curtop = obj.offsetTop
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft
curtop += obj.offsetTop
}
}
return [curleft,curtop];
}
以下是一种递归版本的实现:
function findPos(element) {
if (element) {
var parentPos = findPos(element.offsetParent);
return [
parentPos.X + element.offsetLeft,
parentPos.Y + element.offsetTop
];
} else {
return [0,0];
}
}
Element.prototype
添加两个属性,以获取任何元素的顶部/左侧位置。window.Object.defineProperty( Element.prototype, 'documentOffsetTop', {
get: function () { return this.offsetTop + ( this.offsetParent ? this.offsetParent.documentOffsetTop : 0 ); }
} );
window.Object.defineProperty( Element.prototype, 'documentOffsetLeft', {
get: function () { return this.offsetLeft + ( this.offsetParent ? this.offsetParent.documentOffsetLeft : 0 ); }
} );
offset().top
和.left
的结果比较: http://jsfiddle.net/ThinkingStiff/3G7EZ/
我不确定你需要它做什么,这些东西总是相对的(屏幕、窗口、文档)。但当我需要弄清楚时,我发现这个网站很有帮助: http://www.mattkruse.com/javascript/anchorposition/source.html
我还发现,为jQuery制作的工具提示插件具有各种有趣的x、y定位技巧(查看其视口类和底层支持jQuery提供的内容)。 http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/