获取元素相对于body的位置

很多时候,我们需要实现页面内的跳转,除了使用锚点外,还可能会用doby.scrollTop = el.offsetTop.

但有时候,这种方式用起来却有些问题,滚动条滚动的位置往往并不是预想中的目标元素的位置,这是为什么呢?

其实是offsetTop的问题,offsetTop的取值是有一个相对元素的,这个相对元素显然不一定是body,所以当使用doby.scrollTop = el.offsetTop时,自然不会跳到预想中的位置。那么,要怎么做呢?请看下面的函数:

// 元素相对于body的offsetTop
export function getOffsetTopByBody (el) {
  let offsetTop = 0
  while (el && el.tagName !== 'BODY') {
    offsetTop += el.offsetTop
    el = el.offsetParent
  }
  return offsetTop
}

其实每个元素都是有一个offsetParent的属性,这个属性就记录了该元素取offsetTop值的相对元素,然后再求相对元素的相对元素,如此层层相加知道body,即可获取到实际相对于body的offsetTop了

offsetWidth一般使用比较少,但是原理也是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值