【发布时间】:2011-07-24 12:17:47
【问题描述】:
我正在尝试获取页面上某个元素的坐标。我一直在使用标准的方式来获取它:
var el = element, pos = {x: 0, y: 0};
while ( el ) {
pos.x += el.offsetLeft;
pos.y += el.offsetTop;
el = el.offsetParent;
}
但是当有问题的元素具有display: block,并且其中一个offsetParents 具有display: inline; 时,此方法将失败。这是由于this thread中描述的事实:
在尝试使用 jQuery 之后,他们的 .offset()-方法返回了正确的偏移量,我查看了源代码但没有找到他们是如何做到的。所以我的问题是:我如何获得确切的位置?这个项目我不能用jQuery,the thread described earlier中的方法比较麻烦,添加元素和测试工作量太大(性能角度),使用Element.getBoundingClientRect也不可用。
如果您想尝试一下,可以转到 Apple.com 打开您选择的调试器并输入以下内容:
var el, el2;
el = el2 = document.querySelector('#worldwide span');
var pos = {x: 0, y: 0};
while ( el2 ) {
pos.x += el2.offsetLeft;
pos.y += el2.offsetTop;
el2 = el2.offsetParent;
}
alert("Calculated position: " + pos.x + "x" + pos.y + " window size: " + screen.width + "x" + screen.height);
通过这段代码,我得到:Calculated position: 1354x988 window size: 1280x800(即,左边的偏移量是屏幕的方向,显然不是)
这怎么可能?有什么解决办法吗?近似值?它不一定要精确,但它必须比以前更好。谢谢。
编辑:这是为 WebKit 渲染引擎澄清的。
【问题讨论】:
标签: jquery html css dom offset