Javascript:如何跟踪 div 的绝对位置(顶部/左侧)?

标签 javascript html events ecmascript-6 event-handling

我需要根据 html 元素(div)在屏幕上的位置获取其所有位置。我想要类似 addEventListener 的东西,每当屏幕发生变化时(在调整大小/缩放/滚动等时 - 每当元素的位置发生变化时),它都会发送元素的位置。这可以用纯 JavaScript 实现吗?

最佳答案

这并不是一个完整的答案,而是我在评论中的意思的两个例子。也许这会对您尝试做的事情有所帮助。没有预先构建的方法可以执行您想要的操作,但这并不意味着您不能执行此操作。

第一个用于在用户更改浏览器的默认字体大小时调整屏幕布局。没有相应的事件,因此我在窗口上使用 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 函数版本,该函数可以查询并调整事件发生时要执行的内容,并且您可能需要监听大量事件才能执行相同的函数,如此处所示。

关于Javascript:如何跟踪 div 的绝对位置(顶部/左侧)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069005/

相关文章:

reactjs - 为什么解构可以与事件配合使用,而没有事件就无法进行解构

javascript - 调用选择选项中的函数

用于带 SSL 的 Restful Web 服务的 JavaScript 客户端

javascript - CSS-如何在悬停 i 标签时显示面板

javascript - Firebug 中的 'iterator' 函数是什么?

html - 是什么导致这个可调整大小的 div 溢出其 100% 高度的容器?

javascript - 为什么else语句要在if语句之后执行?

javascript - ExtJS addEvents - 它是可选的吗?

javascript - 用于从另一个 .aspx 加载 map 的 Jquery 解决方案?

javascript - 如何设置 Highcharts 图表最大 yAxis 值