Skip to content

Commit 10523a9

Browse files
authored
Update article.md
1 parent 0c8ccfc commit 10523a9

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

8-web-components/7-shadow-dom-events/article.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Shadow DOM y eventos
22

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.
44

55
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.
66

@@ -35,11 +35,11 @@ Si haces clic en el botón, los mensajes son:
3535
1. Inner target: `BUTTON` -- el manejador de evento interno obtiene el target correcto, el elemento dentro del shadow DOM.
3636
2. Outer target: `USER-CARD` -- el manejador de evento del documento obtiene el host shadow como target.
3737

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>`.
3939

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.**
4141

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:
4343

4444
```html run autorun="no-epub" untrusted height=60
4545
<user-card id="userCard">
@@ -65,15 +65,15 @@ userCard.onclick = e => alert(`Outer target: ${e.target.tagName}`);
6565
</script>
6666
```
6767

68-
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.
6969

7070
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>`.
7171

7272
## Propagación, event.composedPath()
7373

7474
Para el propósito de propagación de eventos, es usado un "flattened DOM" (aplanado).
7575

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á.
7777

7878
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.
7979

@@ -94,7 +94,7 @@ En el ejemplo de arriba, el "flattened DOM" es:
9494

9595
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.
9696

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'}`"
9898
Si el árbol shadow fue creado con `{mode: 'closed'}`, la ruta compuesta comienza desde el host: `user-card` en adelante.
9999

100100
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
103103
104104
## event.composed
105105
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.
107107
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.
109109
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`:
111111
112112
- `blur`, `focus`, `focusin`, `focusout`,
113113
- `click`, `dblclick`,
@@ -173,9 +173,9 @@ Los eventos solo cruzan los límites de shadow DOM si sus banderas `composed` se
173173

174174
La mayoría de los eventos nativos tienen `composed: true`, tal como se describe en las especificaciones relevantes:
175175

176-
- UI Events <https://www.w3.org/TR/uievents>.
177-
- Touch Events <https://w3c.github.io/touch-events>.
178-
- Pointer Events <https://www.w3.org/TR/pointerevents>.
176+
- Eventos UI <https://www.w3.org/TR/uievents>.
177+
- Eventos Touch <https://w3c.github.io/touch-events>.
178+
- Eventos Pointer <https://www.w3.org/TR/pointerevents>.
179179
- ...y así.
180180

181181
Algunos eventos nativos que tienen `composed: false`:
@@ -187,6 +187,6 @@ Algunos eventos nativos que tienen `composed: false`:
187187

188188
Estos eventos solo pueden ser capturados en elementos dentro del mismo DOM.
189189

190-
Si enviamos un `CustomEvent`, debemos setear explícitamente `composed: true`.
190+
Si enviamos un evento personalizado `CustomEvent`, debemos setearle explícitamente `composed: true`.
191191

192192
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

Comments
 (0)