Javascript 偏置返回0
我试图开发一个函数,将div元素移动到与悬停元素相同的高度。 为此,我使用了offsetTop,但它总是返回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
$( 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的例子将有助于解决这个问题。