说说offset

在Jquery里面offset()方法是返回或设置匹配元素相对于文档的偏移(位置)。

如果不用Jquery想取得某dom元素的文档偏移,理所当然想到了源生的offsetTop/offsetLeft

 

然而~

源生的offsetTop/offsetLeft返回的并不是相对于文档,而是相对于父级。

 

那么~

获得相对于文档的偏移,我们就需要做一下处理。

首先我们要用到offsetParent这个属性。

 

jquery也有个同名方法,作用是返回最近的祖先定位元素。

注意哦,不是父级,是祖先定位元素。

 

所以思路就是,把自己包括所有祖先的offsetTop/offsetLeft相加,就得到了文档的相对偏移。

function getElementMouseCoords(ele){
    var o = ele,
        t = 0,
        l = 0;
    while(o.tagName != 'BODY'){
        t += o.offsetTop;
        l += o.offsetLeft;
        o = o.offsetParent;
    }
    return {
        top:t,
        left:l
    };
};

发表回复