我正在使用一个带有链接列的表,当链接被单击时,我想获取行的偏移量。我尝试使用element. offsetTop和$(element). offset(). top,两者都返回0父元素也返回0作为其顶部偏移量。
我试过了
function getTop(element)
{
var top = findPosY(element);
console.log(top);
}
function findPosY(obj) {
var curtop = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curtop += obj.offsetTop
obj = obj.offsetParent;
}
}
else if (obj.y)
curtop += obj.y;
return curtop;
}
但这仍然为y位置返回0。
6条答案
按热度按时间2wnc66cl1#
下面的函数遍历DOM树,计算路径上的位置,返回一个属性为
.x
和.y
的对象,getPosition(element).y
将给予从页面顶部算起的像素数。希望这有帮助;)
h7appiyu2#
offsetParent依赖于您的样式。See here它明确指出offsetParent在某些情况下可能返回null。您应该检查这些情况。
如果你有jquery,我建议你使用他们的offset函数来获得y偏移。Offset API here
另外,if语句中的while循环是多余的,不需要if,因为while循环计算的是相同的东西,如果条件为假,它就不会执行。
6rqinv9w3#
对于在这里登陆的任何人,我建议使用
getBoundingClientRect()
来获取元素相对于文档的顶部和左侧位置,或者获取元素的大小及其相对于视口的位置。noj0wjuj4#
我刚刚遇到了这个问题,罪魁祸首是我将
contain: content;
添加到了一个父元素中,这显然会影响.offsetTop的值。polkgigr5#
John发布的内容很好,但offsetTop和offsetLeft标识到最后一个相对位置的距离。这将计算冗余距离。我做了一些更改,现在工作正常:
sshcrbum6#
我发现这是一个简单可靠的解决方案:
window.pageYOffset + element.getBoundingClientRect().y
window.pageYOffset
是页面向下滚动的距离。这假设滚动容器是页面本身,而不是元素树中较低的元素。您可能还需要将window
更改为document.body
。element.getBoundingClientRect().y
是元素的y位置,但相对于滚动位置。滚动到元素越近,这个数字就越小(考虑到这可能是一个负数!)