Javascript getBoundingClientRect不准确

Javascript getBoundingClientRect不准确,javascript,jquery,viewport,getboundingclientrect,Javascript,Jquery,Viewport,Getboundingclientrect,我的目标是在元素出现在视口之前注入元素(取决于惰性数据属性,默认值为元素出现在视口之前100px)。我是如何使用getBoundingClientRect()实现的 我发现的一个主要问题是(当TestBox.isOnScreen(元素)时,我将控制台记录$(窗口)。scrollTop()与控制台日志一起记录:当元素被检测到在视口中时,并不总是准确的。有时是14px、5px或完全正确 有人遇到过这个问题吗?或者我是不是实现错了?它不应该是不准确的,可能是发生了其他事情。试着看看是边距、填充还是其他

我的目标是在元素出现在视口之前注入元素(取决于惰性数据属性,默认值为元素出现在视口之前100px)。我是如何使用
getBoundingClientRect()实现的

我发现的一个主要问题是(当
TestBox.isOnScreen(元素)
时,我将控制台记录
$(窗口)。scrollTop()
与控制台日志一起记录:当元素被检测到在视口中时,并不总是准确的。有时是14px、5px或完全正确


有人遇到过这个问题吗?或者我是不是实现错了?

它不应该是不准确的,可能是发生了其他事情。试着看看是边距、填充还是其他一些样式造成了干扰。另外,代码中没有定义
el
,该元素来自哪里?问题是有很多元素视口已经存在,因此很难确定是哪个边距/填充导致了这种情况:(.
el
是页面上我希望延迟加载的元素。您是否在移动浏览器中尝试此操作?如果是,您使用的是哪个浏览器?如果是Edge或Chrome,getBoundingClientRect不会返回与“可视视口”相关的结果(即window.scrollX | Y,window.innerWidth | Height)。它返回相对于“布局视口”的结果。有关这两个视口的解释,请参见bokan.ca/viewport/index.html。它不应该不准确,可能是发生了其他问题。尝试查看是否是边距、填充或其他样式造成了干扰。此外,代码中没有定义
el
,该元素来自何处?问题是t上有许多元素他已经打开了多个视口,因此很难确定是哪个边距/填充导致了这种情况:(.
el
是页面上我希望延迟加载的元素。您是否在移动浏览器中尝试此操作?如果是,您使用的是哪个浏览器?如果是Edge或Chrome,getBoundingClientRect不会返回与“可视视口”相关的结果(即window.scrollX | Y,window.innerWidth | Height)。它返回相对于“布局视口”的结果。有关这两个视口的说明,请参见bokan.ca/viewport/index.html。
const LAZY_THRESHOLD_DEFAULT = 100;
TestBox.isOnScreen = function(element) {
    const reservedDistance = parseInt(element.getAttribute(THRESHOLD) || LAZY_THRESHOLD_DEFAULT, 10);
    const rect = el.getBoundingClientRect();
    return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= $(window).height() &&
        rect.right <= $(window).width()
}
$(window).scroll(function() {
  if (TestBox.isOnScreen(element)) {
    // Inject the element
  }
});