我正在使用 Polymer 的 ShadowDOM 和 polyfill MutationObserver
,需要:
- 检测何时
HTMLCanvasElement
插入 a 以便我可以执行布局(其宽度和高度未通过offsetWidth
/offsetHeight
与 DOM 树分离时确定) - 检测元素何时被移除,以便我可以停止它的
requestAnimationFrame
循环
传统上,如果没有 Shadow DOM,它的工作方式如下:
- 附加
MutationObserver
到任何画布元素document.body
并对其执行querySelectorAll
- 执行一些方法,例如
layoutNode
在这些元素上 - 如果在动画循环中
document.body.contains(node)
返回false
,则该节点已从 DOM 中移除
使用 Shadow DOM 时,我可以绕过 shadow dom 边界,方法是对 DOM 中已添加根的所有元素执行(似乎非常低效)扫描,并layoutNode
在任何继承自HTMLCanvasElement
.
如何从画布的动画循环中检查该节点是否仍在 DOM 树中?
是否有更好的 API 用于检测何时插入 DOM 节点?
(注意,使用 Polymer 的 CustomElements polyfill 无法使用 MutationEvents。)