Ðеб-компоненÑÑ - ÑÑо Ð½Ð°Ð±Ð¾Ñ ÑазлиÑнÑÑ ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¹, позволÑÑÑÐ¸Ñ ÑоздаваÑÑ Ð¿Ð¾Ð²ÑоÑно иÑполÑзÑемÑе наÑÑÑаиваемÑе ÑлеменÑÑ Ñ Ð¸Ñ ÑÑнкÑионалÑноÑÑÑÑ, инкапÑÑлиÑованной оÑделÑно Ð¾Ñ Ð¾ÑÑалÑной ÑаÑÑи ваÑего кода - и иÑполÑзоваÑÑ Ð¸Ñ Ð² ваÑÐ¸Ñ Ð²ÐµÐ±-пÑиложениÑÑ .
ÐонÑÑÐ¸Ñ Ð¸ иÑполÑзованиеÐак ÑазÑабоÑÑики, вÑе Ð¼Ñ Ð·Ð½Ð°ÐµÐ¼, ÑÑо как можно болÑÑе повÑоÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° - Ñ Ð¾ÑоÑÐ°Ñ Ð¸Ð´ÐµÑ. ТÑадиÑионно ÑÑо бÑло не Ñак пÑоÑÑо Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑÐºÐ¸Ñ ÑÑÑÑкÑÑÑ ÑазмеÑки - подÑмайÑе о Ñложном HTML (и ÑвÑзанном Ñ Ð½Ð¸Ð¼ ÑÑиле и ÑÑенаÑии), коÑоÑÑе вам иногда пÑÐ¸Ñ Ð¾Ð´Ð¸Ð»Ð¾ÑÑ Ð¿Ð¸ÑаÑÑ Ð´Ð»Ñ Ð²Ð¸Ð·ÑализаÑии полÑзоваÑелÑÑÐºÐ¸Ñ ÑлеменÑов ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ UI, и о Ñом, как Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑное иÑполÑзование Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑевÑаÑиÑÑ Ð²Ð°ÑÑ ÑÑÑаниÑÑ Ð² беÑпоÑÑдок еÑли Ð²Ñ Ð½Ðµ бÑдеÑе оÑÑоÑожнÑ.
Ðеб-компоненÑÑ Ð½Ð°Ð¿ÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ð° ÑеÑение ÑÐ°ÐºÐ¸Ñ Ð¿Ñоблем - они ÑоÑÑоÑÑ Ð¸Ð· ÑÑÑÑ Ð¾ÑновнÑÑ ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¹, коÑоÑÑе можно иÑполÑзоваÑÑ Ð²Ð¼ÐµÑÑе Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑнивеÑÑалÑнÑÑ Ð½Ð°ÑÑÑаиваемÑÑ ÑлеменÑов Ñ Ð¸Ð½ÐºÐ°Ð¿ÑÑлиÑованной ÑÑнкÑионалÑноÑÑÑÑ, коÑоÑÑе можно повÑоÑно иÑполÑзоваÑÑ Ð³Ð´Ðµ Ñгодно, не опаÑаÑÑÑ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ð¹ кода.
<template>
и <slot>
позволÑÑÑ ÑоздаваÑÑ ÑÐ°Ð±Ð»Ð¾Ð½Ñ ÑазмеÑки, коÑоÑÑÑ
не видно на оÑобÑажаемой ÑÑÑаниÑе. ÐаÑем иÑ
можно многокÑаÑно иÑполÑзоваÑÑ Ð² каÑеÑÑве оÑÐ½Ð¾Ð²Ñ ÑÑÑÑкÑÑÑÑ Ð½Ð°ÑÑÑаиваемого ÑлеменÑа.ÐазовÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ к ÑеализаÑии веб-компоненÑа обÑÑно вÑглÑÐ´Ð¸Ñ Ð¿ÑимеÑно Ñак:
CustomElementRegistry.define()
, пеÑедав ÐµÐ¼Ñ Ð¸Ð¼Ñ ÑлеменÑа, коÑоÑÑй бÑÐ´ÐµÑ Ð¾Ð¿ÑеделÑн, клаÑÑ Ð¸Ð»Ð¸ ÑÑнкÑиÑ, в коÑоÑÑÑ
Ñказана его ÑÑнкÑионалÑноÑÑÑ, и, необÑзаÑелÑно, Ð¾Ñ ÐºÐ°ÐºÐ¾Ð³Ð¾ ÑлеменÑа он наÑледÑеÑÑÑ.Element.attachShadow()
. ÐобавÑÑе доÑеÑние ÑлеменÑÑ, обÑабоÑÑики ÑобÑÑий и Ñ.д. в Ñеневой DOM, иÑполÑзÑÑ Ð¾Ð±ÑÑнÑе меÑÐ¾Ð´Ñ DOM.<template>
и <slot>
. Снова иÑполÑзÑйÑе обÑÑнÑе меÑÐ¾Ð´Ñ DOM, ÑÑÐ¾Ð±Ñ ÐºÐ»Ð¾Ð½Ð¸ÑоваÑÑ Ñаблон и пÑикÑепиÑÑ ÐµÐ³Ð¾ к ваÑей Ñеневой DOM.Ð ÑководÑÑво, показÑваÑÑее, как иÑполÑзоваÑÑ ÑÑнкÑии наÑÑÑаиваемÑÑ ÑлеменÑов Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑоÑÑÑÑ Ð²ÐµÐ±-компоненÑов, а Ñакже ÑаÑÑказÑÐ²Ð°ÐµÑ Ð¿Ñо колбÑки жизненного Ñикла и некоÑоÑÑе дÑÑгие более ÑложнÑе ÑÑнкÑии.
Ð ÑководÑÑво, коÑоÑое ÑаÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð¾ÑÐ½Ð¾Ð²Ñ Ñеневой DOM, показÑваеÑ, как пÑикÑепиÑÑ ÑеневÑÑ DOM к ÑлеменÑÑ, добавлÑÑÑ Ðº ÑÐµÐ½ÐµÐ²Ð¾Ð¼Ñ Ð´ÐµÑÐµÐ²Ñ DOM, ÑÑилизоваÑÑ ÐµÐ³Ð¾ и многое дÑÑгое.
Ð ÑководÑÑво, показÑваÑÑее, как опÑеделиÑÑ Ð¿Ð¾Ð²ÑоÑно иÑполÑзÑемÑÑ ÑÑÑÑкÑÑÑÑ HTML Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑлеменÑов <template>
и <slot>
, а заÑем иÑполÑзоваÑÑ ÑÑÑ ÑÑÑÑкÑÑÑÑ Ð²Ð½ÑÑÑи ваÑиÑ
веб-компоненÑов.
CustomElementRegistry
СодеÑÐ¶Ð¸Ñ ÑÑнкÑии, ÑвÑзаннÑе Ñ Ð½Ð°ÑÑÑаиваемÑми ÑлеменÑами, в пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ñ Ð¼ÐµÑодом CustomElementRegistry.define()
, иÑполÑзÑемÑм Ð´Ð»Ñ ÑегиÑÑÑаÑии новÑÑ
наÑÑÑаиваемÑÑ
ÑлеменÑов, ÑÑÐ¾Ð±Ñ Ð¸Ñ
можно бÑло заÑем иÑполÑзоваÑÑ Ð² ваÑем докÑменÑе.
Window.customElements
ÐозвÑаÑÐ°ÐµÑ ÑÑÑÐ»ÐºÑ Ð½Ð° обÑÐµÐºÑ CustomElementRegistry
.
СпеÑиалÑнÑе колбÑк-ÑÑнкÑии, опÑеделÑннÑе внÑÑÑи опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа наÑÑÑаиваемого ÑлеменÑа, коÑоÑÑе влиÑÑÑ Ð½Ð° его поведение:
connectedCallback
: вÑзÑваеÑÑÑ, когда наÑÑÑаиваемÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð²Ð¿ÐµÑвÑе подклÑÑаеÑÑÑ Ðº DOM докÑменÑа.disconnectedCallback
: вÑзÑваеÑÑÑ, когда полÑзоваÑелÑÑкий ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¾ÑклÑÑаеÑÑÑ Ð¾Ñ DOM докÑменÑа.adoptedCallback
: вÑзÑваеÑÑÑ, когда наÑÑÑаиваемÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÐµÑемеÑаеÑÑÑ Ð² новÑй докÑменÑ.attributeChangedCallback
: вÑзÑваеÑÑÑ Ð¿Ñи добавлении, Ñдалении или изменении одного из аÑÑибÑÑов наÑÑÑаиваемого ÑлеменÑа.is
: позволÑÐµÑ ÑказаÑÑ, ÑÑо ÑÑандаÑÑнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ HTML должен веÑÑи ÑÐµÐ±Ñ ÐºÐ°Ðº заÑегиÑÑÑиÑованнÑй вÑÑÑоеннÑй полÑзоваÑелÑÑкий ÑлеменÑ.Document.createElement()
: позволÑÐµÑ ÑоздаÑÑ ÑкземплÑÑ ÑÑандаÑÑного HTML-ÑлеменÑа, коÑоÑÑй ведÑÑ ÑÐµÐ±Ñ ÐºÐ°Ðº заданнÑй заÑегиÑÑÑиÑованнÑй наÑÑÑаиваемÑй вÑÑÑоеннÑй ÑлеменÑ.ÐÑевдоклаÑÑÑ, оÑноÑÑÑиеÑÑ ÐºÐ¾Ð½ÐºÑеÑно к наÑÑÑаиваемÑм ÑлеменÑам:
:defined
: СооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÑлеменÑÑ, вклÑÑÐ°Ñ Ð²ÑÑÑоеннÑе ÑлеменÑÑ Ð¸ наÑÑÑаиваемÑе ÑлеменÑÑ, опÑеделÑннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ CustomElementRegistry.define()
.:host
: ÐÑбиÑÐ°ÐµÑ Ñеневой Ñ
оÑÑ Ñеневого DOM, ÑодеÑжаÑего CSS, внÑÑÑи коÑоÑого он иÑполÑзÑеÑÑÑ.:host()
: ÐÑбиÑÐ°ÐµÑ Ñеневой Ñ
оÑÑ Ñеневой DOM, ÑодеÑжаÑий CSS, внÑÑÑи коÑоÑого он иÑполÑзÑеÑÑÑ (Ñак ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑбÑаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸Ð·Ð½ÑÑÑи его Ñеневой DOM) - но ÑолÑко еÑли ÑелекÑоÑ, ÑказаннÑй в каÑеÑÑве паÑамеÑÑа ÑÑнкÑии, ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ ÑеневÑм Ñ
оÑÑом.:host-context()
: ÐÑбиÑÐ°ÐµÑ Ñеневой Ñ
оÑÑ Ñеневой DOM, ÑодеÑжаÑий CSS, внÑÑÑи коÑоÑого он иÑполÑзÑеÑÑÑ (Ñак ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑбÑаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸Ð·Ð½ÑÑÑи его Ñеневой DOM) - но ÑолÑко еÑли ÑелекÑоÑ, ÑказаннÑй в каÑеÑÑве паÑамеÑÑа ÑÑнкÑии, ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¿Ñедком(-ами) Ñеневого Ñ
оÑÑа в Ñом меÑÑе, где он наÑ
одиÑÑÑ Ð²Ð½ÑÑÑи иеÑаÑÑ
ии DOM.ÐÑевдоÑлеменÑÑ, оÑноÑÑÑиеÑÑ ÐºÐ¾Ð½ÐºÑеÑно к наÑÑÑаиваемÑм ÑлеменÑам:
::part
: ÐÑедÑÑавлÑÐµÑ Ð»Ñбой ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² Ñеневом деÑеве, имеÑÑий ÑооÑвеÑÑÑвÑÑÑий аÑÑибÑÑ part
.ShadowRoot
ÐÑедÑÑавлÑÐµÑ ÐºÐ¾Ñневой Ñзел поддеÑева Ñеневой модели DOM.
DocumentOrShadowRoot
ÐикÑин, опÑеделÑÑÑий ÑÑнкÑии, доÑÑÑпнÑе Ð´Ð»Ñ Ð²ÑÐµÑ Ð´Ð¾ÐºÑменÑов и ÑеневÑÑ ÐºÐ¾ÑневÑÑ Ñзлов.
Element
РаÑÑиÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑеÑÑейÑа Element
, ÑвÑзаннÑе Ñ Ñеневой DOM:
Element.attachShadow()
пÑикÑеплÑÐµÑ Ñеневое деÑево DOM к ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑлеменÑÑ.Element.shadowRoot
возвÑаÑÐ°ÐµÑ Ñеневой коÑневой Ñзел, пÑикÑеплÑннÑй к ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑлеменÑÑ, или знаÑение null
, еÑли коÑневой Ñзел не пÑикÑеплÑн.Node
ÐÐ¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ðº инÑеÑÑейÑÑ Node
, оÑноÑÑÑиеÑÑ Ðº Ñеневой DOM:
Node.getRootNode()
возвÑаÑÐ°ÐµÑ ÐºÐ¾ÑÐµÐ½Ñ Ð¾Ð±ÑекÑа конÑекÑÑа, коÑоÑÑй необÑзаÑелÑно вклÑÑÐ°ÐµÑ Ñеневой коÑневой Ñзел, еÑли он доÑÑÑпен.Node.isConnected
возвÑаÑÐ°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение, ÑказÑваÑÑее, подклÑÑÑн ли Ñзел (пÑÑмо или коÑвенно) к обÑекÑÑ ÐºÐ¾Ð½ÑекÑÑа, напÑÐ¸Ð¼ÐµÑ Ð¾Ð±ÑÐµÐºÑ Document
в ÑлÑÑае обÑÑного DOM или ShadowRoot
в ÑлÑÑае Ñеневого DOM.Event
РаÑÑиÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑеÑÑейÑа Event
, оÑноÑÑÑиеÑÑ Ðº Ñеневой модели DOM:
Event.composed
: возвÑаÑÐ°ÐµÑ Boolean
, коÑоÑÑй ÑказÑваеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑобÑÑие ÑаÑпÑоÑÑÑанÑÑÑÑÑ ÑеÑез гÑаниÑÑ Ñеневой DOM в ÑÑандаÑÑнÑÑ DOM (true
) или Ð½ÐµÑ (false
).Event.composedPath
: возвÑаÑÐ°ÐµÑ Ð¿ÑÑÑ Ðº ÑобÑÑÐ¸Ñ (обÑекÑÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
бÑдÑÑ Ð²ÑÐ·Ð²Ð°Ð½Ñ Ð¾Ð±ÑабоÑÑики). ÐÑо не вклÑÑÐ°ÐµÑ ÑÐ·Ð»Ñ Ð² ÑеневÑÑ
деÑевÑÑÑ
, еÑли Ñеневой коÑневой Ñзел бÑл Ñоздан Ñ Ð·Ð°ÐºÑÑÑÑм ShadowRoot.mode
.<template>
СодеÑÐ¶Ð¸Ñ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ HTML, коÑоÑÑй не оÑобÑажаеÑÑÑ Ð¿Ñи пеÑвонаÑалÑной загÑÑзке ÑодеÑжаÑего докÑменÑа, но Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑобÑажаÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ JavaScript, коÑоÑÑй в оÑновном иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве оÑÐ½Ð¾Ð²Ñ Ð´Ð»Ñ ÑÑÑÑкÑÑÑ Ð½Ð°ÑÑÑаиваемÑÑ
ÑлеменÑов. СвÑзаннÑй инÑеÑÑÐµÐ¹Ñ DOM - HTMLTemplateElement
.
<slot>
ÐаполниÑÐµÐ»Ñ Ð²Ð½ÑÑÑи веб-компоненÑа, коÑоÑÑй можно заполниÑÑ ÑобÑÑвенной ÑазмеÑкой, ÑÑо позволÑÐµÑ ÑоздаваÑÑ Ð¾ÑделÑнÑе деÑевÑÑ DOM и пÑедÑÑавлÑÑÑ Ð¸Ñ
вмеÑÑе. СвÑзаннÑй инÑеÑÑÐµÐ¹Ñ DOM - HTMLSlotElement
.
slot
ÐазнаÑÐ°ÐµÑ ÑÐ»Ð¾Ñ ÑлеменÑÑ Ð² Ñеневом деÑеве Ñеневого DOM.
Slotable
ÐикÑин, ÑеализованнÑй как Ñзлами Element
, Ñак и Text
, опÑеделÑÑÑий ÑÑнкÑии, коÑоÑÑе позволÑÑÑ Ð¸Ð¼ ÑÑаÑÑ ÑодеÑжимÑм ÑлеменÑа <slot>
. ÐикÑин опÑеделÑÐµÑ Ð¾Ð´Ð¸Ð½ аÑÑибÑÑ, Slotable.assignedSlot
, коÑоÑÑй возвÑаÑÐ°ÐµÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑлоÑ, в коÑоÑÑй вÑÑавлен Ñзел.
Element
extensions
РаÑÑиÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑеÑÑейÑа Element
, оÑноÑÑÑиеÑÑ Ðº ÑлоÑам:
Element.slot
: ÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑлоÑа Ñеневого DOM, пÑикÑеплÑнного к ÑлеменÑÑ.ÐÑевдоÑлеменÑÑ, оÑноÑÑÑиеÑÑ ÐºÐ¾Ð½ÐºÑеÑно к ÑлоÑам:
::slotted
: СооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ ÑодеÑжимомÑ, вÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ Ð² ÑлоÑ.slotchange
ÐÑзÑваеÑÑÑ Ð´Ð»Ñ ÑкземплÑÑа HTMLSlotElement
(ÑÐ»ÐµÐ¼ÐµÐ½Ñ <slot>
) пÑи изменении Ñзла(-ов), ÑодеÑжаÑиÑ
ÑÑ Ð² ÑÑом ÑлоÑе.
ÐÑ ÑоздаÑм ÑÑд пÑимеÑов в ÑепозиÑоÑии GitHub Ñ Ð¿ÑимеÑами веб-компоненÑов. Со вÑеменем бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ болÑÑе.
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами html.elements.template api.ShadowRoot СмоÑÑиÑе Ñакжеclass
и this
ÑинÑакÑиÑÑ. Ðн пÑедоÑÑавлÑÐµÑ Ð¿ÑоÑÑой и ÑÑнкÑионалÑнÑй API Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкиÑ
ÑлеменÑов.RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4