Javascript:如何跟踪 div 的绝对位置 (top/left)?

Javascript: How to keep track of absolute positions (top/left) of a div?

我需要根据 html 元素 (div) 在屏幕上的位置获取其所有位置。我想要像 addEventListener 这样的东西,它会在屏幕发生变化时发送元素的位置(在 resize/on zoom/on 滚动等 - 每当元素的位置发生变化时)。纯 Javascript 有可能吗?

这不是一个完整的答案,而是我在评论中的意思的两个例子。也许它会对设置您要尝试做的事情有所帮助。没有预建的方法来做你想做的事,但这并不意味着你不能做。

第一个用于在用户更改浏览器的默认字体大小时调整屏幕布局。没有相关事件,所以我在 window 上使用 focusblur 事件并跟踪屏幕外元素的大小以测试默认字体大小是否正确变了。它在 blur 上捕获并在 focus 上测试。调整大小发生在 sizeTable 函数中。

window.addEventListener( 'focus', () => fontSizeProxy( false ), false );
window.addEventListener( 'blur', () => fontSizeProxy( true ), false );
fontSizeProxy.base = document.getElementById('sz_gauge').offsetHeight;
fontSizeProxy.size = document.querySelector('div.tabs').clientWidth;

function fontSizeProxy( b )
 {
   if ( b )
     { fontSizeProxy.size = document.querySelector('div.tabs').clientWidth; }
   else // focus event
     { setTimeout( done, 1000 ); };

    function done()
     {
       // Get w after the delay so browser can reset completely.
       let w = document.querySelector('div.tabs').clientWidth;
       if ( w !== fontSizeProxy.size )
         {
            fontSizeProxy.size = w;
            fontSizeProxy.base = document.getElementById('sz_gauge').offsetHeight;
            sizeTable( nav.n );
         }; // end if
       w = null;    
    } // close done
 } // close fontSizeProxy

第二个示例是 resize 事件,显示它是因为它限制了事件,因此函数 sizeTable 不会像事件触发时那样频繁执行。您可能需要比此处使用的 500 毫秒更少的油门。

window.addEventListener( 'resize', resize, false );

function resize()
 { 
    if ( !resize.clear ) 
      {
        resize.clear = setTimeout( () => { resize.clear = null; sizeTable( nav.n ); }, 500 );    
      }; // end if
 } // close resize

我想,您想要的概念就在这里。您只需要制作您的 sizeTable 函数版本,该函数可以在事件发生时查询和调整您想要执行的内容,并且您可能必须侦听大量事件才能执行相同的函数,如此处所示。