π CustomEvent κ° shadow root λ°μΌλ‘ μ νλμ§ μλλ€?
shadow DOM κ³Ό ν¨κ» μμ νλ€λ³΄λ©΄ CustomEvent λ‘ μμ±ν μ΄λ²€νΈκ° shadow DOM boundary λ₯Ό λ²μ΄λμ μ ν λμ§ μλ μ΄μλ₯Ό λ§μ£Όνκ² λλλ°, μ΄λ μλλ λμμ λλ€.
μμλ‘ μ΄ν΄λ΄ μλ€.
λ€μκ³Ό κ°μ menu
μ»΄ν¬λνΈκ° μλ€κ³ νκ² μ΅λλ€.
μ¬μ¬μ©μ±μ μν΄ κ³΅ν΅ λ©λ΄ λ‘μ§μ λ΄μ μ»΄ν¬λνΈμ λλ€.
μ½λλ λ¨μνμμΌ°μ§λ§, open
μμ±μ΄ true
κ° λλ©΄ ν΄λΉ λ©λ΄ μ리먼νΈμ overlay μ νμμ
λ©λ΄λ₯Ό λ«κΈ° μν 컀μ€ν μ΄λ²€νΈλ₯Ό λ°μμν€λ νΈλ€λ¬λ₯Ό λΆμ°©νλ νλ¦μΌλ‘ μ§νλ©λλ€.
export default class MyMenu extends HTMLElement {
// ... other logics
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'open') {
this.setOverlayEvent()
}
}
setOverlayEvent() {
// ... other logics
const onCloseHandler = this.onClose.bind(this)
document.addEventListener('touchstart', onCloseHandler, { once: true })
}
onClose() {
this.dispatchEvent(new CustomEvent('close:menu', { bubbles: true }))
}
}
μ΄μ ν΄λΉ μ»΄ν¬λνΈλ₯Ό νμ₯ν color-menu
μ»΄ν¬λνΈλ₯Ό μ μνκ² μ΅λλ€.
export default class MyColorMenu extends MyMenu {
// ... web component initialize logics
}
μμνκΈ°λ‘λ menu
μ»΄ν¬λνΈμ close:menu
μ΄λ²€νΈλ₯Ό μμ DOM μΌλ‘ λ²λΈλ§μμΌμΌνλλ°, μμλλ‘ λμνμ§ μμ΅λλ€.
π μ μ΄λ κ² λμν κΉ?
μ΄λ DOM νμ€ μ€νμ μ μλ μ΄λ²€νΈμ μ΅μ κ°μ²΄λ₯Ό μ΄ν΄λ³΄λ©΄ ννΈλ₯Ό μ»μ μ μμ΅λλ€.
https://developer.mozilla.org/en-US/docs/Web/API/Event/Event
π‘Event composed
A boolean value indicating whether the event will trigger listeners outside of a shadow root.
The default is `false`
(see https://developer.mozilla.org/en-US/docs/Web/API/Event/composed for more details)
CustomEvent
μ κ²½μ° κΈ°λ³Έ Event
μΈν°νμ΄μ€λ₯Ό μμνλ©°, composed
κΈ°λ³Έκ°μΌλ‘ false
λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ shadow root
μμλ‘ μ΄λ²€νΈκ° μ νλμ§ μμ΅λλ€.
π ν΄κ²° λ°©λ²μ?
λ§μ½ shadow root λ°μΌλ‘ CustomEvent
λ₯Ό μ΄λ²€νΈλ₯Ό μ νμν€κ³ μΆλ€λ©΄ μ΄λ²€νΈλ₯Ό μμ±ν΄μ€ λ composed: true
λ₯Ό ν¨κ» μ λ¬ν΄μ£Όλ©΄ λ©λλ€.
this.dispatchEvent(
new CustomEvent('close:menu', {
bubbles: true,
composed: true // β
shadow root λ°μΌλ‘ μ λ¬
})
)
π μ°Έκ³ μλ£
'π¨βπ» web.dev > js.ts' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
TypeScript + Jest μ λ ν μ€νΈ μμ±νκΈ° (0) | 2022.11.27 |
---|---|
async function μλ³νκΈ° (1) | 2022.08.08 |
[JavaScript] Debounce μ Throttle μ λν΄ μμ보μ (0) | 2022.07.09 |
[TypeScript] enum κ³Ό union type, μΈμ μ¨μΌν κΉ? (2) | 2022.07.09 |
[JavaScript] Array.sort λ μμ μ±μ 보μ₯ν κΉ? (0) | 2022.03.09 |
π¬ λκΈ