Directivas svelte:window, svelte:head, svelte:body

Los componentes svelte:window, svelte:head y svelte:body son unas directivas que nos permiten importar en un componente, de forma respectiva, la ventana, la cabeza y el cuerpo del documento HTML, con el objetivo de poder inyectar eventos sobre estos elementos, así como agregar etiquetas DOM a la cabeza de la página.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Las directivas especiales de Svelte que comienzan con svelte: nos ofrecen una forma elegante y eficiente de interactuar con elementos globales del DOM como el head, el body y la window. Estas directivas nos permiten tanto inyectar contenido dinámico en estas secciones como gestionar eventos globales de manera sencilla y limpia.

Con svelte:head podemos insertar elementos directamente dentro de la etiqueta <head> del documento. Esto es especialmente útil para modificar el título de la página sin recurrir a manipulaciones clásicas con JavaScript. Por ejemplo, si escribimos:

<svelte:head>
  <title>Hola</title>
</svelte:head>

cada vez que el componente se renderice, el título de la página cambiará automáticamente a Hola. Esto nos evita tener que acceder a window.document.title y manejar manualmente la actualización del título, haciendo el código más declarativo y limpio.

Por otro lado, svelte:window y svelte:body nos permiten tanto inyectar contenido en estas partes del DOM como escuchar eventos globales. Por ejemplo, con svelte:window podemos escuchar eventos como el scroll de la ventana usando:

<svelte:window on:scroll={handleScroll} />

donde handleScroll es una función que procesará el evento cada vez que el usuario haga scroll. Es importante tener en cuenta el rendimiento cuando manejamos eventos frecuentes como este, para evitar problemas de eficiencia.

De manera similar, con svelte:body podemos adjuntar eventos al cuerpo del documento. Esto es útil para capturar interacciones globales, como el clic derecho. Por ejemplo, podemos crear una función que muestre una alerta cuando el usuario intente abrir el menú contextual con el botón derecho del ratón:

<script>
  function no(event) {
    alert('No puedes copiarme');
    event.preventDefault();
  }
</script>

<svelte:body on:contextmenu={no} />

En este caso, al hacer clic derecho, se mostrará la alerta y, gracias a event.preventDefault(), evitaremos que se despliegue el menú contextual habitual. Aunque esta práctica puede ser molesta para los usuarios, sirve para ilustrar cómo podemos controlar eventos globales con estas directivas.

Una ventaja importante de usar estas directivas es que Svelte se encarga automáticamente de añadir los event listeners cuando el componente se monta y de limpiarlos cuando el componente se desmonta. Esto significa que no tenemos que preocuparnos por eliminar manualmente los manejadores de eventos, evitando fugas de memoria o comportamientos inesperados cuando el componente desaparece.

Además, estas directivas son muy útiles para manejar eventos como mouseenter o mouseleave en el body, o para reaccionar a cambios globales sin necesidad de manipular directamente el DOM o usar APIs clásicas de JavaScript. Así, podemos mantener nuestro código más organizado y aprovechar las ventajas reactivas de Svelte.

En definitiva, svelte:head, svelte:body y svelte:window nos ofrecen una forma sencilla y potente de interactuar con el entorno global de la página, inyectando contenido y gestionando eventos de manera declarativa y eficiente. Esto nos permite crear aplicaciones más limpias y con mejor mantenimiento, evitando las trampas habituales de la manipulación directa del DOM.

Lista de reproducción
  1. 1
    ¿Qué es Svelte?
    9 minutos
  2. 2
    ¿Cómo crear un proyecto de Svelte?
    7 minutos
  3. 3
    Creando nuestro primer componente
    7 minutos
  4. 4
    Datos dinámicos y props
    7 minutos
  5. 5
    Anidando componentes
    7 minutos
  6. 6
    Capturando eventos
    7 minutos
  7. 7
    Eventos y reactividad
    8 minutos
  8. 8
    Atributos condicionales e IF
    9 minutos
  9. 9
    Bucles
    11 minutos
  10. 10
    Bloques await
    7 minutos
  11. 11
    Bind
    8 minutos
  12. 12
    bind:this
    6 minutos
  13. 13
    ¿Para qué nos sirve un evento personalizado?
    6 minutos
  14. 14
    createEventDispatcher
    6 minutos
  15. 15
    Eventos con detalles
    7 minutos
  16. 16
    Reenviando eventos
    6 minutos
  17. 17
    Ejemplo de eventos (primera parte)
    12 minutos
  18. 18
    Ejemplo de eventos (y segunda parte)
    16 minutos
  19. 19
    Modificadores de eventos
    6 minutos
  20. 20
    Fundamentos del CSS con Svelte
    9 minutos
  21. 21
    Clases condicionales
    7 minutos
  22. 22
    Estilos en línea y variables CSS
    8 minutos
  23. 23
    Estilos globales
    6 minutos
  24. 24
    Importar hojas de estilo externas
    5 minutos
  25. 25
    Reactividad experta con el operador $
    8 minutos
  26. 26
    Slots (parte 1 de 2)
    5 minutos
  27. 27
    Slots (parte 2 de 2)
    7 minutos
  28. 28
    Directivas svelte:window, svelte:head, svelte:body
    4 minutos
  29. 29
    Actualizar de Rollbar a Vite 3
    11 minutos
  30. 30
    Exportar a Web Components
    10 minutos
  31. 31
    Integrar TypeScript, SCSS, PostCSS...
    8 minutos
  32. 32
    Hasta aquí (por ahora)
    3 minutos
  33. 33
    Lo que se viene con Svelte 5
    13 minutos