在项目开中使用offsetTop获取当前标签与body标签的距离,发现offsetTop获取的高度为0。
通过查询offsetParent属性返回值:
(1).返回距离当前元素最近的采用定位祖先元素。
(2).如果祖先元素中没有采用定位的元素,则返回body元素。
使用offsetTop获取的标签距离的父级元素使用了position进行定位,导致获取到的获取的实际距离不是从body到当前对象的距离。
解决方案:可以通过offsetParent.nodeName是offsetTop否是body标签,如果是可以直接使用offsetTop获取高度,否则不断循环获取高度。
代码:
let eleId:any = document.querySelector("#"+herfId)
let par:any = eleId.offsetParent;
let top = 0
if(par.nodeName.toLowerCase() == "body"){ // 当节点为body可直接使用offsetTop获取距离
top += eleId.offsetTop; // 获取高度
}else{
while(par){ // 循环获取当前对象与body的高度
top += par.offsetTop;
par = par.offsetParent;
}
}
}