首页 > jquery 1.8.2中offset方法针对body位置的实现疑问

jquery 1.8.2中offset方法针对body位置的实现疑问

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
    };

WEB开发有种麻烦事叫兼容性,每个浏览器使用的标准可能不一样,例如IE6,7与IE8的盒模式距离运算就不一样,所以jquery需要增加各种微调来适应于各个浏览器。

【热门文章】
【热门文章】