1.为何body的计算要另起炉灶呢?
bodyOffset: function( body ) {
var top = body.offsetTop,
left = body.offsetLeft;
if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
}
return { top: top, left: left };
}
2.即便如此,jQuery.support.doesNotIncludeMarginInBodyOffset,即:
support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 )
为何要拿body.offsetTop !== 1作为判断去计算margin呢?我只知道body与其他html元素不同,它的offsetLeft,offsetTop计算不包括margin。
3.追加一个问题:对于其他元素的位置计算,为何要减去文档的边框宽度呢?不是应当加么?
以下代码截取其中关键一段:
if (typeof elem.getBoundingClientRect !== "undefined") {
box = elem.getBoundingClientRect();
}
win = getWindow(doc);
clientTop = docElem.clientTop || body.clientTop || 0;
clientLeft = docElem.clientLeft || body.clientLeft || 0;
scrollTop = win.pageYOffset || docElem.scrollTop;
scrollLeft = win.pageXOffset || docElem.scrollLeft;
return {
top: box.top + scrollTop - clientTop,
left: box.left + scrollLeft - clientLeft
};
黄舟2017-04-10 13:10:42
WEB开发有种麻烦事叫兼容性,每个浏览器使用的标准可能不一样,例如IE6,7与IE8的盒模式距离运算就不一样,所以jquery需要增加各种微调来适应于各个浏览器。