能想到的有不停的找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;
};
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
可以看看这个API:
https://developer.mozilla.org...
如果是你做滚动侦测:
除了 getBoundingClientRect 也可以使用 IntersectionObserver .