Web Component æ¯ä¸å¥ä¸åçææ¯ï¼å è®¸ä½ å建å¯éç¨çå®å¶å ç´ ï¼å®ä»¬çåè½å°è£ å¨ä½ ç代ç ä¹å¤ï¼å¹¶ä¸å¨ä½ ç web åºç¨ä¸ä½¿ç¨å®ä»¬ã
æ¦å¿µå使ç¨ä½ä¸ºå¼åè ï¼æä»¬é½ç¥éå°½å¯è½å¤çéç¨ä»£ç æ¯ä¸ä¸ªå¥½ä¸»æãè¿å¯¹äºèªå®ä¹æ è®°ç»ææ¥è¯´é叏䏿¯é£ä¹å®¹æ â æ³æ³å¤æç HTMLï¼ä»¥åç¸å ³çæ ·å¼åèæ¬ï¼ï¼ææ¶ä½ ä¸å¾ä¸åä»£ç æ¥åç°èªå®ä¹ UI æ§ä»¶ï¼å¹¶ä¸å¦æä½ ä¸å°å¿çè¯ï¼å¤æ¬¡ä½¿ç¨å®ä»¬ä¼ä½¿ä½ ç页é¢åå¾ä¸å¢ç³ã
Web Components æ¨å¨è§£å³è¿äºé®é¢ â å®ç±ä¸é¡¹ä¸»è¦ææ¯ç»æï¼å®ä»¬å¯ä»¥ä¸èµ·ä½¿ç¨æ¥å建å°è£ åè½çå®å¶å ç´ ï¼å¯ä»¥å¨ä½ 忬¢çä»»ä½å°æ¹éç¨ï¼ä¸å¿ æ å¿ä»£ç å²çªã
<template>
å <slot>
å
ç´ ä½¿ä½ å¯ä»¥ç¼åä¸å¨åç°é¡µé¢ä¸æ¾ç¤ºçæ 记模æ¿ãç¶åå®ä»¬å¯ä»¥ä½ä¸ºèªå®ä¹å
ç´ ç»æçåºç¡è¢«å¤æ¬¡éç¨ãå®ç° web component çåºæ¬æ¹æ³é常å¦ä¸æç¤ºï¼
CustomElementRegistry.define()
æ¹æ³æ³¨åä½ çæ°èªå®ä¹å
ç´ ï¼å¹¶åå
¶ä¼ éè¦å®ä¹çå
ç´ åç§°ãæå®å
ç´ åè½çç±»ã以åå¯éçå
¶æç»§æ¿èªçå
ç´ ãElement.attachShadow()
æ¹æ³å°ä¸ä¸ª shadow DOM éå å°èªå®ä¹å
ç´ ä¸ã使ç¨é常ç DOM æ¹æ³å shadow DOM 䏿·»å åå
ç´ ãäºä»¶çå¬å¨ççã<template>
å <slot>
å®ä¹ä¸ä¸ª HTML 模æ¿ã忬¡ä½¿ç¨å¸¸è§ DOM æ¹æ³å
鿍¡æ¿å¹¶å°å
¶éå å°ä½ ç shadow DOM ä¸ãä»ç»å¦ä½ä½¿ç¨èªå®ä¹å ç´ çåè½æ¥å建ç®åç web componentï¼ä»¥åçå½å¨æåè°åå ¶ä»æ´é«çº§çåè½ã
ä»ç» shadow DOM çåºç¡ç¥è¯ï¼å±ç¤ºå¦ä½åå ç´ ä¸éå shadow DOMï¼æ·»å å° shadow DOM æ ï¼æ·»å æ ·å¼ççã
ä»ç»å¦ä½ä½¿ç¨ <template>
å <slot>
å
ç´ å®ä¹å¯éç¨ç HTML ç»æï¼ç¶åå¨ Web component ä¸ä½¿ç¨è¯¥ç»æã
CustomElementRegistry
å
å«èªå®ä¹å
ç´ ç¸å
³åè½ï¼æå¼å¾æ³¨æçæ¯ CustomElementRegistry.define()
æ¹æ³ç¨æ¥æ³¨åæ°çèªå®ä¹å
ç´ ï¼è¿æ ·å°±å¯ä»¥å¨ææ¡£ä¸ä½¿ç¨å®ä»¬ã
Window.customElements
è¿å CustomElementRegistry
对象çå¼ç¨ã
å®ä¹å¨èªå®ä¹å ç´ çç±»å®ä¹ä¸çç¹æ®åè°å½æ°ï¼å½±åå ¶è¡ä¸ºï¼
connectedCallback
ï¼å½èªå®ä¹å
ç´ ç¬¬ä¸æ¬¡è¢«è¿æ¥å°ææ¡£ DOM æ¶è¢«è°ç¨ãdisconnectedCallback
ï¼å½èªå®ä¹å
ç´ ä¸ææ¡£ DOM æå¼è¿æ¥æ¶è¢«è°ç¨ãadoptedCallback
ï¼å½èªå®ä¹å
ç´ è¢«ç§»å¨å°æ°ææ¡£æ¶è¢«è°ç¨ãattributeChangedCallback
ï¼å½èªå®ä¹å
ç´ çä¸ä¸ªå±æ§è¢«å¢å ãç§»é¤ææ´æ¹æ¶è¢«è°ç¨ãå®ä¹äºä»¥ä¸æ©å±ï¼
is
å
¨å± HTML 屿§ï¼å
è®¸ä½ æå®æ å HTML å
ç´ åå®ä¹çå
ç½®å
ç´ ä¸æ ·å·¥ä½ãDocument.createElement()
æ¹æ³çâisâé项ï¼å
è®¸ä½ å建ä¸ä¸ªæ å HTML å
ç´ çå®ä¾ï¼è¡¨ç°å¾åä¸ä¸ªç»å®ç已注åçèªå®ä¹å
ç½®å
ç´ ãä¸èªå®ä¹å ç´ ç¹å«ç¸å ³ç伪类ï¼
:defined
ï¼å¹é
ä»»ä½å·²å®ä¹çå
ç´ ï¼å
æ¬å
ç½®å
ç´ åä½¿ç¨ CustomElementRegistry.define()
å®ä¹çèªå®ä¹å
ç´ ã:host
ï¼éæ© shadow DOM ç shadow hostï¼å
容æ¯å®å
é¨ä½¿ç¨ç CSSï¼containing the CSS it is used insideï¼ã:host()
ï¼éæ© shadow DOM ç shadow hostï¼å
容æ¯å®å
é¨ä½¿ç¨ç CSSï¼è¿æ ·ä½ å¯ä»¥ä» shadow DOM å
é¨éæ©èªå®ä¹å
ç´ ï¼â ä½åªå¹é
ç»å®æ¹æ³çéæ©å¨ç shadow host å
ç´ ã:host-context()
ï¼éæ© shadow DOM ç shadow hostï¼å
容æ¯å®å
é¨ä½¿ç¨ç CSSï¼è¿æ ·ä½ å¯ä»¥ä» shadow DOM å
é¨éæ©èªå®ä¹å
ç´ ï¼â ä½åªå¹é
ç»å®æ¹æ³çéæ©å¨å¹é
å
ç´ çå shadow host å
ç´ ãShadowRoot
表示 shadow DOM åæ çæ ¹èç¹ã
Element
extensions
ä¸ shadow DOM æå
³ç Element
æ¥å£çæ©å±ï¼
Element.attachShadow()
æ¹æ³å° shadow DOM æ éå ç»ç¹å®å
ç´ ãElement.shadowRoot
屿§è¿åéå ç»ç¹å®å
ç´ ç shadow rootï¼æè
null
å¦ææ²¡æ shadow root 被éå ãNode
ç¸å
³æå±
ä¸ shadow DOM ç¸å
³ç Node
æ¥å£çæå±ï¼
Node.getRootNode()
æ¹æ³è¿åä¸ä¸æå¯¹è±¡çæ ¹ï¼å¯ä»¥éæ©å
å« shadow rootï¼å¦æå¯ç¨çè¯ãNode.isConnected
屿§è¿åä¸ä¸ªå¸å°å¼è¡¨ç¤ºèç¹æ¯å¦è¿æ¥ï¼ç´æ¥æé´æ¥ï¼å°ä¸ä¸æå¯¹è±¡ãä¾å¦ï¼å¨æ®é DOM çæ
åµä¸ä¸º Document
å¯¹è±¡ï¼æè
å¨ shadow DOM çæ
åµä¸ä¸º ShadowRoot
ãEvent
æå±
ä¸ shadow DOM ç¸å
³ç Event
æ¥å£çæ©å±ï¼
Event.composed
ï¼è¿å Boolean
å®è¡¨æäºä»¶æ¯å¦ä¼éè¿ shadow DOM è¾¹çä¼ æå°æ å DOMãEvent.composedPath
ï¼è¿åäºä»¶çè·¯å¾ï¼ä¾¦å¬å¨å°è¢«è°ç¨ç对象ï¼ã妿 shadow root æ¯ä½¿ç¨ ShadowRoot.mode
为 closed å建çï¼åä¸å
æ¬ shadow æ ä¸çèç¹ã<template>
å
å«ä¸ä¸ª HTML çæ®µï¼ä¸ä¼å¨ææ¡£åå§åæ¶æ¸²æã使¯å¯ä»¥å¨è¿è¡æ¶ä½¿ç¨ JavaScript æ¾ç¤ºã主è¦ç¨ä½èªå®ä¹å
ç´ ç»æçåºç¡ãå
³èç DOM æ¥å£æ¯HTMLTemplateElement
ã
<slot>
web component ä¸çä¸ä¸ªå ä½ç¬¦ï¼ä½ å¯ä»¥å¡«å
èªå·±çæ è®°ï¼è¿æ ·ä½ å°±å¯ä»¥å建åç¬ç DOM æ å¹¶å°å®ä»¬åç°å¨ä¸èµ·ãå
³èç DOM æ¥å£æ¯HTMLSlotElement
ã
slot
å
¨å± HTML 屿§
å°å¨ shadow DOM æ ä¸çææ§½åé ç»ä¸ä¸ªå ç´ ã
Element.assignedSlot
ä¸ä¸ªåªè¯»å±æ§ï¼å®è¿å对æå
¥æ¤å
ç´ ç <slot>
çå¼ç¨ã
Text.assignedSlot
ä¸ä¸ªåªè¯»å±æ§ï¼å®è¿å对æå
¥æ¤ææ¬èç¹ç <slot>
çå¼ç¨ã
Element
æ©å±
ä¸ææ§½ç¸å
³ç Element
æ¥å£çæ©å±ï¼
Element.slot
ï¼è¿åéå å°å
ç´ ä¸ç shadow DOM ææ§½çååãslots ç¹å«ç¸å ³ç伪å ç´ ï¼
::slotted
ï¼å¹é
ä»»ä½å·²ç»æå
¥ä¸ä¸ª slot çå
容ãslotchange
äºä»¶
å½ææ§½ä¸çèç¹æ¹åæ¶å¨ HTMLSlotElement
å®ä¾ï¼<slot>
å
ç´ ï¼ä¸è§¦åã
å¨ web-components-examplesï¼æä»¬æ£å¨æå»ºä¸äºä¾åã以å伿·»å æ´å¤ã
è§è æµè§å¨å ¼å®¹æ§ html.elements.template api.ShadowRoot åè§class
and this
syntax. It provides a simple and functional API for creating custom elements.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