如何获取指定元素于document顶部的距离

能想到的有不停的找parent累加offsetTop, 但是感觉是不是有点笨.
特殊原因, 所以也没办法用scrollTop+rect.top这种
请教有没有其他更简便的办法

阅读 7.6k
5 个回答

不笨,印象里jquery的offset方法也是这么干的。

DOM树是一个嵌套,你从最深处向外找,也不会有几层的,除非你的切图极其不合理,所以写一个while循环即可:

while(node.parentNode) {
    top += ...
    node = node.parentNode
}

JQUERY源码

function toTop (target, parent) {
  let top = 0;
  
  while (target && target != parent) {
      top += target.offsetTop;
    target = target.offsetParent
  }
  return top
}

toTop(target)

用循环向上找

function getPositionTop(node) {
        var top = node.offsetTop;
        var parent = node.offsetParent;
        while(parent != null) {
            top += parent.offsetTop;
            parent = parent.offsetParent;
        }
        return top;
    };
//先生命一个变量 scrollTop = 0;
//然后
componentDidUpdate(){
    scrollTop = document.body.scrollTop;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题