【发布时间】:2016-11-30 04:47:07
【问题描述】:
在 v1 影子根中,我们可以在 <slot> 元素上监听 slotchange,然后使用 slot.assignedNodes() 来检测变化。我正在寻找一种使用 v0 影子根的方法。
使用 ShadowDOM v0,有没有办法观察影子根中 <content> 元素的分布式节点的变化?
实现这一点的最简单方法是使用requestAnimationFrame 创建一个轮询循环,该循环调用content.getDistributedNodes() 将新结果与旧结果进行比较,但显然轮询并不理想而且成本很高。
怎么做?
【问题讨论】:
-
你能在
content元素上使用突变观察器吗? -
@KevBot 我该怎么做?
childList观察孩子,但分布式节点呢?有例子吗? -
可能使用
.getDistributedNodes()方法,并且可以从那里调用这些元素的突变观察者。或者可能在插入点.getDestinationInsertionPoints()上附加一个突变观察者。我会在早上尝试更具体的工作。 -
关于为什么这被否决的任何背景?
-
@KevBot,我想了想:对于我们希望观察的给定内容元素,我们可以从它向上遍历找到影子根主机,然后在主机上使用 MutationObserver 来检测孩子的变化,每当发生这种情况时,我们只需在内容元素上调用
.getDistributedNodes以找到新的分布。我们还需要在所有宿主子节点上使用 MutationObserver 来检测属性变化,因为这会导致根的<content>元素的选择器结果发生变化。
标签: javascript web-component shadow-dom