Spec-Zone.ru › Web APIs

ShadowRoot

Базовая Широко поддерживается *

Данная функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Интерфейс ShadowRoot API Shadow DOM является корневым узлом поддерева DOM, которое отображается отдельно от основного дерева DOM документа.

Вы можете получить ссылку на тень элемента, используя его свойство Element.shadowRoot, при условии, что оно было создано с помощью Element.attachShadow() с параметром mode установленным в значение open.

EventTarget Node DocumentFragment ShadowRoot

Свойства экземпляра

ShadowRoot.activeElement Только для чтения

Возвращает Element в дереве тени, у которого есть фокус.

ShadowRoot.adoptedStyleSheets

Добавляет массив созданных таблиц стилей, которые будут использоваться поддеревом Shadow DOM. Они могут быть совместно использованы с другими поддеревьями DOM, которые используют тот же родительский узел Document, и самим документом.

ShadowRoot.clonable Только для чтения

Логическое значение, указывающее, можно ли клонировать корень тени.

ShadowRoot.delegatesFocus Только для чтения

Логическое значение, указывающее, делегирует ли корень тени фокус, если выбран нефокусируемый узел.

ShadowRoot.fullscreenElement Только для чтения

Элемент, который в данный момент находится в полноэкранном режиме для этого дерева тени.

ShadowRoot.host Только для чтения

Возвращает ссылку на элемент DOM, к которому прикреплен ShadowRoot.

ShadowRoot.innerHTML

Устанавливает или возвращает ссылку на дерево DOM внутри ShadowRoot.

ShadowRoot.mode Только для чтения

Режим ShadowRoot, либо open, либо closed. Это определяет, доступны ли внутренние функции корня тени из JavaScript.

ShadowRoot.pictureInPictureElement Только для чтения

Возвращает Element в дереве тени, которое в данный момент отображается в режиме «картинка в картинке».

ShadowRoot.pointerLockElement Только для чтения

Возвращает Element, установленный в качестве цели для событий мыши, пока указатель заблокирован. null если блокировка ожидается, указатель разблокирован или если целевой элемент находится в другом дереве.

ShadowRoot.serializable Только для чтения

Логическое значение, указывающее, может ли корень тени быть сериализован. Сериализуемый корень тени внутри элемента будет сериализован функциями Element.getHTML() или ShadowRoot.getHTML(), когда параметр options.serializableShadowRoots установлен в true. Это устанавливается при создании корня тени.

ShadowRoot.slotAssignment Только для чтения

Возвращает строку, содержащую тип назначения слота, либо manual, либо named.

ShadowRoot.styleSheets Только для чтения

Возвращает StyleSheetList объектов CSSStyleSheet для таблиц стилей, явно связанных с деревом тени или встроенных в него.

Методы экземпляра

ShadowRoot.getAnimations()

Возвращает массив всех объектов Animation, которые в данный момент действуют, а их целевые элементы являются потомками дерева тени.

ShadowRoot.getSelection() Нестандартный

Возвращает объект Selection, представляющий выбранный пользователем диапазон текста или текущую позицию курсора.

ShadowRoot.elementFromPoint() Нестандартный

Возвращает самый верхний элемент по заданным координатам.

ShadowRoot.elementsFromPoint() Нестандартный

Возвращает массив всех элементов по заданным координатам.

ShadowRoot.setHTMLUnsafe()

Парсит строку HTML в фрагмент документа без очистки, который затем заменяет исходное поддерево shadowroot. Строка HTML может содержать декларативные shadow root, которые будут обработаны как элементы шаблона, если HTML был задан с помощью ShadowRoot.innerHTML.

События

Следующие события доступны ShadowRoot через событие «подъёма» от HTMLSlotElement:

HTMLSlotElement slotchange события

Событие, генерируемое при изменении узлов внутри слота.

Примеры

Следующие фрагменты взяты из нашего примера life-cycle-callbacks (посмотреть в действии), в котором создаётся элемент, отображающий квадрат заданного размера и цвета в атрибутах элемента.

Внутри определения класса элемента <custom-square> мы включаем некоторые события жизненного цикла, вызывающие внешнюю функцию updateStyle(), которая фактически применяет размер и цвет к элементу. Вы увидите, что мы передаём ей this (сам пользовательский элемент) в качестве параметра.

connectedCallback() {
  console.log('Custom square element added to page.');
  updateStyle(this);
}

attributeChangedCallback(name, oldValue, newValue) {
  console.log('Custom square element attributes changed.');
  updateStyle(this);
}

В самой функции updateStyle() мы получаем ссылку на shadow DOM с помощью Element.shadowRoot. Отсюда мы используем стандартные методы обхода DOM для поиска элемента <style> внутри shadow DOM и затем обновляем найденный CSS:

function updateStyle(elem) {
  const shadow = elem.shadowRoot;
  const childNodes = shadow.childNodes;
  for (const node of childNodes) {
    if (node.nodeName === "STYLE") {
      node.textContent = `
div {
  width: ${elem.getAttribute("l")}px;
  height: ${elem.getAttribute("l")}px;
  background-color: ${elem.getAttribute("c")};
}
      `;
    }
  }
}

Спецификации

Спецификация
DOM
# interface-shadowroot

Совместимость браузеров

Настольные Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
ShadowRoot 53 79 63 40 10 53 63 41 10 6.0 53
activeElement 53 79 63 40 10 53 63 41 10 6.0 53
adoptedStyleSheets 73 79 101 60 16.4 73 101 50 16.4 11.0 73
clonable 124 124 123 110 17.4 124 123 82 17.4 27.0 124
delegatesFocus 53 79 94 40 15 53 94 41 15 6.0 53
elementFromPoint
53До Chrome 66, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
79 63
40До Opera 53, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
10.1
53До Chrome Android 66, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
63
41До Opera Android 47, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
10.3
6.0До Samsung Internet 9.0, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
53До WebView Android 66, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
elementsFromPoint
53До Chrome 66, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
79 63 40 11.1
53До Chrome Android 66, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
63 41 11.3
6.0До Samsung Internet 9.0, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
53До WebView Android 66, этот метод возвращал null когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452.
fullscreenElement 71 79 6463 58 16.4 71 6463 50
16.4["Доступно только на iPad, не на iPhone.", "Показывает кнопку поверх экрана, которую нельзя отключить. Проведение пальцем вниз выходит из полноэкранного режима, что делает его непригодным для некоторых случаев использования, таких как игры."]
10.0 71
getAnimations 84 84 75 70 14 84 79 60 14 14.0 84
getHTML 125 125 128 111 18 125 128 83 18 27.0 125
getSelection 53 79 Нет 40 Нет 53 Нет 41 Нет 6.0 53
host 53 79 63 40 10 53 63 41 10 6.0 53
innerHTML 53 79 63 40 10 53 63 41 10 6.0 53
mode 53 79 63 40 10.1 53 63 41 10.3 6.0 53
pictureInPictureElement 69 79 Нет 56 13.1 105 Нет 72 13.4 20.0 105
pointerLockElement 53 79 63 40 10.1 53 63 41 Нет 6.0 53
serializable 125 125 128 111 18 125 128 83 18 27.0 125
setHTMLUnsafe 124 124 123 110 17.4 124 123 82 17.4 27.0 124
slotAssignment 86 86 92 72 16.4 86 92 61 16.4 14.0 86
styleSheets 53 79 63 40 12.1 53 63 41 12.2 6.0 53

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API