mic*_*pes 12 javascript dom dom-events mutation-observers getboundingclientrect
有没有办法检测元素的getBoundingClientRect()
矩形何时发生变化而没有实际计算getBoundingClientRect()
?像"脏旗"的东西?天真地,我认为在浏览器的内部工作中必须存在这样的机制,但是我无法在DOM API中发现这个事物.也许有一种方法可以用MutationObservers做到这一点?
我的应用程序是一个Web组件,它将DOM元素转换为图形的节点,并将边缘绘制到全屏画布上.看到这里.
现在,我正在调用getBoundingClientRect()
每个元素,每个动画帧帧一次,即使没有任何变化.这感觉很贵.我通常以60 fps的速度在功能强大的计算机上获得%15-%50的CPU使用率.
有谁知道这样的事情?你认为期待这样的事情是否合理?这种事情可行吗?有没有提过过?
Nam*_*oel 10
正如上面的评论中提到的。您正在寻找的 API 是:ResizeObserver
和IntersectionObserver
。但是,有几点需要注意:
ResizeObserver
只有当观察到的元素改变大小时才会触发。它基本上只会为您提供正确的宽度和高度值。ResizeObserver
并IntersectionObserver
都应该不是块漆ResizeObserver
将在布局之后但在绘制之前触发,这基本上使它感觉同步。IntersectionObserver
异步触发。这就是IntersectionObserver
为此而生的。它通常可用于可见性检测。这里的问题是IntersectionObserver
只有当相交的比率发生变化时才会触发。这意味着,如果一个小的孩子在一个较大的容器 div 内移动,并且您跟踪父级和子级之间的交集,除了当孩子进入或退出父级时,您将不会得到任何事件。
您仍然可以跟踪元素何时移动。这是如何:
getBoundingClientRect
。getBoundingClientRect
。注意:此技术也可用于更高效的 polypill,ResizeObserver
其功能比IntersectionObserver
. 常用的 polyfill 依赖于MutationObserver
它的效率要低得多。
归档时间: |
|
查看次数: |
1695 次 |
最近记录: |