能想到的有不停的找parent累加offsetTop, 但是感觉是不是有点笨.
特殊原因, 所以也没办法用scrollTop+rect.top这种
请教有没有其他更简便的办法
能想到的有不停的找parent累加offsetTop, 但是感觉是不是有点笨.
特殊原因, 所以也没办法用scrollTop+rect.top这种
请教有没有其他更简便的办法
不笨,印象里jquery的offset方法也是这么干的。
DOM树是一个嵌套,你从最深处向外找,也不会有几层的,除非你的切图极其不合理,所以写一个while循环即可:
while(node.parentNode) {
top += ...
node = node.parentNode
}
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;
};
13 回答12.6k 阅读
7 回答1.7k 阅读
9 回答1.5k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
可以看看这个API:
https://developer.mozilla.org...
如果是你做滚动侦测:
除了 getBoundingClientRect 也可以使用 IntersectionObserver .