Original article: How to use the Fullscreen API in JavaScript

¿Cómo ejecutas un juego creado para la web en pantalla completa? En este rápido tutorial, verás como mostrar un juego o cualquier otro elemento HTML en pantalla completa, cómo salir de pantalla completa, y cómo hacer un lindo botón de activación de pantalla completa en SVG.

Recientemente, publiqué un tutorial largo de un juego en JavaScript. Si bien fue una guía muy completa, hubo unas pocas cosas que no pudimos cubrir: cómo mostrar el juego en pantalla completa.

Cuando miras un vídeo en YouTube, tienes la opción también de mirarlo en pantalla completa. Pero, ¿sabía que la característica de pantalla completa no es solamente para elementos de vídeo?

En JavaScript, hay una API Fullscreen. Y es sorprendentemente simple de usar. Aquí hay una demo de lo que estamos a punto de implementar. Veamos cómo funciona.

También puedes mirar este artículo como un vídeo en YouTube.

Tabla de Contenidos:

Cómo entrar en Modo Pantalla Completa

Digamos que tenemos un sitio web sencillo con algo de texto. Y al final, tenemos un botón que mostrará el texto en pantalla completa. Vamos a refinar la apariencia de este botón, pero primero, vamos a trabajar en la lógica principal.

Screenshot-2024-02-21-at-18.20.51
Un sitio web sencillo con algo de texto y un botón de Activación de Pantalla Completa
body {
  font-family: Montserrat;
  margin: 50px;
  max-width: 500px;
}

En el código de arriba, adjuntamos un manejador de evento al botón en HTML. Entonces podemos implementar la lógica de la función toggleFullscreen en JavaScript.

En esta función, todo lo que tenemos que hacer es llamar al método requestFullscreen en la propiedad documentElement del documento. Y eso es:

function toggleFullscreen() {
  document.documentElement.requestFullscreen();
}

Si haces clic al botón, tu sitio web aparecerá en pantalla completa.

Cómo estilar la Pantalla Completa

Antes de que abarquemos cómo salir de la pantalla completa y crear un lindo botón de activación, veamos algunas cosas más.

Lo que podrías dar cuenta enseguida es que, con más espacio, tu contenido se podría perder en pantalla completa. Asegúrate que tienes un estilo responsivo que se vea bien en cada tamaño de pantalla.

Inclusive puedes estilar el diseño específicamente para pantalla completa. En CSS puedes establecer una media query que solamente se aplique al estilo en caso de que el display-mode sea fullscreen.

Por ejemplo, puedes cambiar el font-size, o cambiar el background-color para tener una apariencia distinta en pantalla completa.

@media (display-mode: fullscreen) {
  body {
    background-color: #f9bb86;
    font-size: 1.2em;
  }
}

Cómo mostrar Juegos con el Elemento Canvas en Pantalla Completa

En este caso, queremos hacer un juego que use el elemento canvas que sea en pantalla completa - como el juego Gorillas - también necesitamos cambiar el tamaño del elemento canvas para que encaje en pantalla completa.

En este caso, podemos usar el evento resize del objeto window. El evento se dispara cuando simplemente cambia el tamaño de la ventana del navegador, y cuando entramos o salimos del modo pantalla completa.

Con el evento resize, podemos cambiar el tamaño del elemento canvas para que encaje en toda la pantalla completa, actualizar la escalabilidad, ajustar cualquier otra propiedad que necesitamos cambiar al cambiar de tamaño y redibujar toda la escena.

window.addEventListener("resize", () => {
  // Cambiar de tamaño el elemento de canvas
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;

  // Actualizar la escalabilidad
  // . . .

  // Ajustar las propiedades dependientes del tamaño
  // . . .

  // Redibujar el canvas
  draw();
});

Si revisas el código fuente del juego Gorillas en CodePen, encontrarás pasos similares.

Cómo salir de Pantalla Completa

Ahora que sabemos cómo entrar en pantalla completa, ¿cómo salimos?

Por defecto, si presionas la tecla Escape, el navegador vuelve a la vista normal. En Google Chrome, inclusive obtienes una notificación en la parte superior de la pantalla sobre esto cuando entras en modo pantalla completa.

Screenshot-2024-02-21-at-17.47.03-2
Google Chrome muestra una notificación en la parte superior de la pantalla una vez que entras en pantalla completa

¿Qué sucede si quieres salir del modo pantalla completa cuando haces clic al botón de HTML? Cambiemos nuestro comportamiento del botón para activar o desactivar la pantalla completa.

function toggleFullscreen() {
  if (!document.fullscreenElement) {
    document.documentElement.requestFullscreen();
  } else {
    document.exitFullscreen();
  }
}

Primero, comenzamos verificando si ya estamos en modo pantalla completa. Podemos hacer esto verificando la propiedad fullscreenElement del objeto document. Si no está definido, entonces entramos en modo fullscreen de la misma forma como hicimos antes. Y si ya estamos en modo pantalla completa, entonces podemos salir llamando al método exitFullscreen de document.

Es realmente así de simple. Con unas pocas líneas de código, podemos implementar la lógica para un botón de activación de pantalla completa.

Cómo codificar un ícono de Pantalla Completa con SVG

Si sigues mis tutoriales, sabes que amo la codificación creativa, y dibujar desde código. Así actualizamos la apariencia de nuestro botón, para hacerlo similar a lo que tenemos en YouTube.

Screenshot-2024-02-21-at-18.06.07
Icono de Pantall Completa

Vamos a crear una imagen SVG dentro de nuestro botón. Si verificas el código fuente de YouTube, verás que también usan un SVG.

Definamos un elemento SVG dentro de HTML. Estableceremos su tamaño a 30 x 30 y definiremos un elemento path:

. . .

<button onclick="toggleFullscreen()">
  <svg width="30" height="30">
    <path
      stroke="black"
      stroke-width="3"
      fill="none"
      d="
        M 10, 2 L 2,2 L 2, 10
        M 20, 2 L 28,2 L 28, 10
        M 28, 20 L 28,28 L 20, 28
        M 10, 28 L 2,28 L 2, 20"
    />
  </svg>
</button>

. . .

Para estilizar el path, pondremos su color con la propiedad stroke, ponemos su stroke-width, y nos aseguramos que no terminamos con una forma rellena. Los paths de SVG por defecto se rellenan, así que necesitamos poner explícitamente que no queremos fill (rellenar) esta forma.

Screenshot-2024-02-21-at-18.02.10
Usando los comandos move-to y line-to dentro de un path de SVG

Luego definimos el path con unos pocos comandos de move-to y line-to. Podemos poner estos comandos como una cadena en el atributo `d` del elemento path.

Comenzamos con un comando move-to: M 10, 2. La letra M significa que tenemos un comando move-to, y el 10 y 2 son las coordenadas x e y de este comando. Movimos al principio de una de las cuatro líneas.

Luego continuamos el path con un comando line-to que se mueve a la esquina, y después con otro comando line-to. El comando line-to funciona de una forma similar. Comienza con la letra L, entonces ponemos las coordenadas donde la línea debería de ir.

Luego hicimos lo mismo con las otras esquinas. Nos movemos al siguiente segmento de línea con otro comando move-to y dibujamos una línea con otros dos comandos line-to.

Untitled.021
Dibujando un path en un elemento Canvas con JavaScript tiene algunas similaridades a definir un path en SVG

Nota: si lees my tutorial anterior sobre cómo hacer el juego gorillas, entonces te habrás dado cuento que tuvimos algo similar aquí. También dibujamos paths con move-to y line-to. Excepto que allí nos dibujaron en un elemento canvas con JavaScript, y ahora tenemos los comandos como una cadena dentro del archivo HTML.

Cómo cambiar la Apariencia del Icono

Ahora el SVG se ve bien, pero, ¿qué sucede si queremos tener una apariencia distinta cuando estamos en modo pantalla completa? En YouTube, cuando entramos en modo pantalla completa, el botón cambia de ícono.

Screenshot-2024-02-21-at-18.06.33
Las dos caras del ícono de pantalla completa

Puedes hacer esto de diferentes maneras. La manera más fácil es probablemente definir otro path, dentro del mismo elemento SVG con una apariencia distinta. Luego hace a este path transparente por defecto. Vamos a cambiar la visibilidad de estos dos paths en JavaScript.

. . .

<button onclick="toggleFullscreen()">
  <svg width="30" height="30">
    <path
      id="enter-fullscreen"
      stroke="black"
      stroke-width="3"
      fill="none"
      d="
        M 10, 2 L 2,2 L 2, 10
        M 20, 2 L 28,2 L 28, 10
        M 28, 20 L 28,28 L 20, 28
        M 10, 28 L 2,28 L 2, 20"
    />
    <path
      id="exit-fullscreen"
      stroke="transparent"
      stroke-width="3"
      fill="none"
      d="
        M 10, 2 L 10,10 L 2, 10
        M 20, 2 L 20,10 L 28, 10
        M 28, 20 L 20,20 L 20, 28
        M 10, 28 L 10,20 L 2, 20"
    />
  </svg>
</button>

. . .

Este segundo path es muy similar al anterior. Excepto que usamos diferentes coordenadas para algunos de los comandos line-to.

Luego ponemos IDs únicos para ambos de estos paths, y actualizamos nuestra función toggle en JavaScript. En JavaScript, obtenemos una referencia a estos paths por ID, y luego en el manejador de evento del botón, podemos cambiar la visibilidad de estos elementos de un lado a otro.

const enterFullscreen = document.getElementById("enter-fullscreen");
const exitFullscreen = document.getElementById("exit-fullscreen");

function toggleFullscreen() {
  if (!document.fullscreenElement) {
    document.documentElement.requestFullscreen();
    enterFullscreen.setAttribute("stroke", "transparent");
    exitFullscreen.setAttribute("stroke", "black");
  } else {
    document.exitFullscreen();
    enterFullscreen.setAttribute("stroke", "black");
    exitFullscreen.setAttribute("stroke", "transparent");
  }
}

Ahora si haces clic a este botón, cambia el modo pantalla completa y cambia su apariencia.

Aprender más

Si quieres aprender más sobre SVGs, mira SVG-Tutorial.com donde puedes encontrar un montón de ejemplos desde lo básico a niveles más avanzados. Es un sitio gratis y puedes también encontrar el ejemplo que discutimos en este artículo.

Para usar el botón para ejecutar un juego en JavaScript en pantalla completa, mira todo el Tutorial del Juego en JavaScript en cómo rehacer el juego clásico de Gorillas en freeCodeCamp o en YouTube. Es un tutorial masivo que abarca cosas, desde dibujar en un elemento Canvas de HTML, a toda la lógica del juego, desde manejo de eventos, hasta el bucle de animación, detección de golpes, e inclusive lógica de AI, para el enemigo de gorilla.

Te puedes suscribir a mi canal para más tutoriales de desarrollo de juego en JavaScript:

https://www.youtube.com/channel/UCxhgW0Q5XLvIoXHAfQXg9oQ