You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 8-web-components/7-shadow-dom-events/article.md
+14-14Lines changed: 14 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Shadow DOM y eventos
2
2
3
-
La idea detrás del árbol shadow (oculto) es encapsular los detalles internos de implementación de un componente.
3
+
La idea detrás del árbol shadow es encapsular los detalles internos de implementación de un componente.
4
4
5
5
Digamos que ocurre un evento click dentro de un shadow DOM del componente `<user-card>`. Pero los scripts en el documento principal no tienen idea acerca de los interiores del shadow DOM, especialmente si el componente es de una librería de terceros.
6
6
@@ -35,11 +35,11 @@ Si haces clic en el botón, los mensajes son:
35
35
1. Inner target: `BUTTON` -- el manejador de evento interno obtiene el target correcto, el elemento dentro del shadow DOM.
36
36
2. Outer target: `USER-CARD` -- el manejador de evento del documento obtiene el host shadow como target.
37
37
38
-
Tener la "redirección de eventos" es muy bueno, porque el documento externo no necesita saber acerca del interior del componente. Desde su punto de vista, el evento ocurrió sobre `<user-card>`.
38
+
Tener la "redirección de eventos" es muy bueno, porque el documento externo no necesita tener conocimiento acerca del interior del componente. Desde su punto de vista, el evento ocurrió sobre `<user-card>`.
39
39
40
-
**La redirección no ocurre si el evento ocurre en un elemento eslotado (slot element), que físicamente vive en el "light DOM", el DOM visible.**
40
+
**No hay redirección si el evento ocurre en un elemento eslotado (slot element), que físicamente se aloja en el "light DOM", el DOM visible.**
41
41
42
-
Por ejemplo, si un usuario hace clic en `<span slot="username">`del ejemplo abajo, el target del evento es precisamente ese elemento `span` para ambos manejadores de eventos, el shadow y el light:
42
+
Por ejemplo, si un usuario hace clic en `<span slot="username">`en el ejemplo debajo, el target del evento es precisamente ese elemento `span` para ambos manejadores de eventos, el shadow y el light:
Si un clic ocurre en `"John Smith"`, para ambos manejadores, el interno y el externo, el target es `<span slot="username">`. Es un elemento del light DOM, entonces no hay redirección.
68
+
Si un clic ocurre en `"John Smith"`, el target es `<span slot="username">` para ambos manejadores, el interno y el externo. Es un elemento del light DOM, entonces no hay redirección.
69
69
70
70
Por otro lado, si el clic ocurre en un elemento originalmente del shadow DOM, ej. en `<b>Name</b>`, entonces, como se propaga hacia fuera del shadow DOM, su `event.target` se reestablece a `<user-card>`.
71
71
72
72
## Propagación, event.composedPath()
73
73
74
74
Para el propósito de propagación de eventos, es usado un "flattened DOM" (aplanado).
75
75
76
-
Así, si tenemos un elemento eslotado y un evento ocurre dentro, entonces se propaga hacia arriba a `<slot>` y más arriba.
76
+
Así, si tenemos un elemento eslotado y un evento ocurre dentro, entonces se propaga hacia arriba a `<slot>` y más allá.
77
77
78
78
La ruta completa del destino original "event target", con todos sus elementos shadow, puede ser obtenida usando `event.composedPath()`. Como podemos ver del nombre del método, la ruta se toma despúes de la composición.
79
79
@@ -94,7 +94,7 @@ En el ejemplo de arriba, el "flattened DOM" es:
94
94
95
95
Entonces, para un clic sobre `<span slot="username">`, una llamada a `event.composedPath()` devuelve un array: [`span`, `slot`, `div`, `shadow-root`, `user-card`, `body`, `html`, `document`, `window`]. Que es precisamente la cadena de padres desde el elemento target en el flattened DOM, después de la composición.
96
96
97
-
```warn header="Los detalles del árbol Shadow solo son provistos por `{mode:'open'}` trees"
97
+
```warn header="Los detalles del árbol Shadow solo son provistos en árboles con `{mode:'open'}`"
98
98
Si el árbol shadow fue creado con `{mode: 'closed'}`, la ruta compuesta comienza desde el host: `user-card` en adelante.
99
99
100
100
Este principio es similar a otros métodos que trabajan con el shadow DOM. El interior de árboles cerrados está completamente oculto.
@@ -103,11 +103,11 @@ Este principio es similar a otros métodos que trabajan con el shadow DOM. El in
103
103
104
104
## event.composed
105
105
106
-
La mayoría de los events se propagan exitosamente a través de los límites de un shadow DOM. Hay unos pocos eventos que no.
106
+
La mayoría de los eventos se propagan exitosamente a través de los límites de un shadow DOM. Hay unos pocos eventos que no.
107
107
108
-
Esto es gobernado por la propiedad del objeto de evento `composed`. Si es `true`, el evento cruza los límites. De otro modo, solamente puede ser capturado dentro del shadow DOM.
108
+
Esto está gobernado por la propiedad `composed` del objeto de evento. Si es `true`, el evento cruza los límites. De otro modo, solamente puede ser capturado dentro del shadow DOM.
109
109
110
-
Si miras la [especificación UI Events](https://www.w3.org/TR/uievents), la mayoría de los eventos tienen `composed: true`:
110
+
Vemos en la [especificación UI Events](https://www.w3.org/TR/uievents) que la mayoría de los eventos tienen `composed: true`:
111
111
112
112
- `blur`, `focus`, `focusin`, `focusout`,
113
113
- `click`, `dblclick`,
@@ -173,9 +173,9 @@ Los eventos solo cruzan los límites de shadow DOM si sus banderas `composed` se
173
173
174
174
La mayoría de los eventos nativos tienen `composed: true`, tal como se describe en las especificaciones relevantes:
Algunos eventos nativos que tienen `composed: false`:
@@ -187,6 +187,6 @@ Algunos eventos nativos que tienen `composed: false`:
187
187
188
188
Estos eventos solo pueden ser capturados en elementos dentro del mismo DOM.
189
189
190
-
Si enviamos un `CustomEvent`, debemos setear explícitamente `composed: true`.
190
+
Si enviamos un evento personalizado `CustomEvent`, debemos setearle explícitamente `composed: true`.
191
191
192
192
Observa que en caso de componentes anidados, un shadow DOM puede estar anidado dentro de otro. En ese caso los eventos se propagan a través de los límites de todos los shadow DOM. Entonces, si se pretende que un evento sea solo para el componente inmediato que lo encierra, podemos enviarlo también en el shadow host y setear `composed: false`. Entonces saldrá al shadow DOM del componente, pero no se propagará hacia un DOM de mayor nivel.
0 commit comments