获取元素相对于页面左上角的位置,是比较常用的需求。比如将一个浮层元素定位到当前操作的元素附近,就需要计算当前操作的元素相对于页面左上角的位置,然后将浮层元素也绝对定位到该位置附近。
offsetParent 法
1 | function getOffset(el) { |
思路就是取元素offsetTop
和offsetLeft
,然后使用offsetParent
逐层向上直到根元素,这样就取出了相对于页面左上角的偏移。
clientRect 法
getBoundingClientRect 取出的是元素相对于视窗的距离,那么再加上页面滚动条的偏移,就可以求出元素相对于页面左上角的距离。
1 | function getOffset(el) { |
可见getBoundingClientRect
方法比取offsetParent
效率要高的多,并且搭配window.pageYOffset
代码更简单。
jquery 法
使用 jquery 里的offset
和 position
,可分别获取相对于页面左上角和相对于父元素的偏移。
源码参见https://github.com/jquery/jquery/blob/1.7.2/src/offset.js#L7,而在1.9版本中简化了其实现https://github.com/jquery/jquery/blob/1.9.1/src/offset.js#L1
对比下 baidu/tangram 库中的相应实现
1 | baidu.dom.extend({ |