我有一个奇怪的错误,当我将主体设置为具有39px边距的相对定位元素时开始显示(我正在为页面顶部的工具栏腾出空间).
无论如何 – 如果你看一下大多数网站如何告诉你计算页面元素的位置,你会看到如下代码:
function getPos(elt) { var pt = [0,0]; while (elt.offsetParent !== null) { pt[0] += elt.offsetLeft; pt[1] += elt.offsetTop; elt = elt.offsetParent; } return pt; }
这很好,即使你的< body>标签有一个保证金.但是,如果你的身体也是位置:相对,那么这会返回一个太小的值 – 它不包括body元素的边距.
我如何1)检测身体是否相对定位,2)找到我们的边距是什么,以便我可以将它们重新添加?
请注意,我需要Page坐标,因此我可以将它们与MouseEvent PageX,PageY进行比较.
解决方法
如果你只限于在“现代”浏览器中工作,就像zepto.js实现那样,你可以得到一个小得多的.offset()函数实现:
offset: function(){ var obj = this[0].getBoundingClientRect(); return { left: obj.left + document.body.scrollLeft,top: obj.top + document.body.scrollTop,width: obj.width,height: obj.height }; }
https://github.com/madrobby/zepto/blob/master/src/zepto.js
如果getBoundingClientRect可用,那或多或少是jQuery所做的.