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

Comments