ShadowRoot: elementsFromPoint() 方法

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

ShadowRoot 接口的 elementsFromPoint() 方法会返回指定坐标(相对于视口)处所有 Shadow Root 元素的数组。这些元素按显示堆叠顺序(z-order)从最顶层到最底层排序。

它的操作方式与 ShadowRoot.elementFromPoint 方法类似。一些浏览器只会返回位于该位置的 Shadow Root 元素。其他浏览器则会包含 Shadow DOM 元素之外的元素,从最顶层的 Shadow DOM 元素一直到文档的根节点,例如 <html><svg> 根元素。在这些浏览器中,它的操作方式类似于 Document.elementsFromPoint 方法,但能够跨越 Shadow 边界

语法

js
elementsFromPoint(x, y)

参数

x

点的水平坐标,相对于当前 视口 的左边缘。

y

点的垂直坐标,相对于当前视口的顶部边缘。

返回值

一个 Element 对象的数组。

示例

js
const customElem = document.querySelector("my-custom-element");
const shadow = customElem.shadowRoot;
const elements = shadow.elementsFromPoint(20, 20);
const msg = elements.map((el) => el.localName).join(" < ");
if (msg) {
  console.log(msg);
} else {
  console.log("The custom element had no descendants at x: 20, y: 20.");
}

如果 <my-custom-element> 位于视口左上角附近,并且只包含一个 <div>,则根据浏览器实现,上述可能会返回以下任一结果:

div
div < my-custom-element < body < html

规范

不属于任何标准。

浏览器兼容性

另见