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