Javascript 偏置返回0

Javascript 偏置返回0,javascript,html,Javascript,Html,我试图开发一个函数,将div元素移动到与悬停元素相同的高度。 为此,我使用了offsetTop,但它总是返回0,我不知道我做错了什么 $( document ).ready(function() { const handle = document.querySelector('#handle'); const headers = document.querySelectorAll('.et_pb_accordion_item_0, .et_pb

我试图开发一个函数,将div元素移动到与悬停元素相同的高度。 为此,我使用了offsetTop,但它总是返回0,我不知道我做错了什么

$( document ).ready(function() {
            const handle = document.querySelector('#handle');


            const headers = document.querySelectorAll('.et_pb_accordion_item_0, .et_pb_accordion_item_1, .et_pb_accordion_item_2')
                .forEach(el => {
                  el.addEventListener('mouseover', e => {
                      handle.style.top = `${e.currentTarget.offsetTop}px`;
                });
            });
        });

我还尝试使用
getBoundingClientRect().top
,但如果我滚动dwon,它会返回不同的值,计算正确的偏移量(相同的解决方案对偏移量left有效),递归所有父对象,直到使用以下类似的方法得到null:

function getOffsetTop(element) {
  return element &&
    (element.offsetTop +
      element.offsetParent ? getOffsetTop(element.offsetParent) : 0);
}

然后在代码getOffsetTop(e.currentTarget)上使用该函数,而不是直接获取e.currentTarget.offsetTop。

您应该使用getBoundingClientRect(),如下所示:

var ele = document.getElementById('elementId');
var offset = ele.getBoundingClientRect();
// you can use
offset.left;
offset.top;

它对我有效。

与它的
偏移父项相关的
e.currentTarget
(它是什么元素)的位置是
0
,也就是说,它位于它的
偏移父项
元素的顶部。@Teemu谢谢你的回答。有没有办法获得与offsetParent不相关的x.position?没有,但是您可以使用CSS设置正确的
offsetParent
。解释起来很复杂,看。也有可能是从错误的元素读取偏移量,可能需要从
e.currentTarget
的父元素读取偏移量。。?一个相关HTML和CSS的例子将有助于解决这个问题。