Wawa Sensei logo
LoginEnroll now

Portafolio 3D

Starter pack

Responsivo

隆Tal vez tem铆as este momento pero es hora de hacer nuestro sitio web responsivo!

Ahora necesitamos recrear todo lo que hicimos para la versi贸n de escritorio, 隆pero para m贸vil!

Es broma 馃き, usaremos algunas t茅cnicas para que nuestra escena 3D luzca bien en dispositivos m贸viles.

Me gustar铆a resaltar que no hay una 煤nica soluci贸n perfecta para hacer que una escena 3D sea responsiva. Depende de muchos factores:

  • La complejidad de la escena
  • La cantidad de elementos
  • Rendimiento
  • Lo que deseas lograr

Para la parte de CSS, f谩cilmente haremos que nuestro sitio web sea responsivo con media queries.

useMobile

Usaremos dos t茅cnicas para hacer que nuestra escena 3D sea responsiva:

  • Cambiar la posici贸n base y la escala de los elementos seg煤n el ancho disponible a nuestra disposici贸n. Despu茅s de un cierto umbral, cambiaremos a una versi贸n m贸vil.
  • Ajustar finamente la posici贸n y escala de los elementos bas谩ndonos en un scaleFactor. Nuestra escena luce perfecta en una pantalla de 1980px pero, 驴qu茅 pasa con una pantalla de 1600px? Usaremos un scaleFactor para ajustar la posici贸n y escala de los elementos para mantener la misma apariencia.

Vamos a crear un hook useMobile en una carpeta src/hooks para manejar ambas t茅cnicas:

import { useState } from "react";

const REFERENCE_WIDTH = 1920;
const MOBILE_THRESHOLD = 990;

export const useMobile = () => {
  const [scaleFactor, setScaleFactor] = useState(
    window.innerWidth / REFERENCE_WIDTH
  );
  const [isMobile, setIsMobile] = useState(
    window.innerWidth <= MOBILE_THRESHOLD
  );
  return {
    scaleFactor,
    isMobile,
  };
};

Estamos usando el hook useState para almacenar los valores scaleFactor e isMobile. Esto forzar谩 un re-renderizado cuando los valores cambien.

Usamos dos constantes para definir el ancho perfecto que usamos para posicionar nuestros elementos y el umbral m贸vil (cuando cambiamos a la versi贸n m贸vil).

Opt茅 por no usar el config para esas variables para hacer que este hook sea reutilizable en otros proyectos.

End of lesson preview

To get access to the entire lesson, you need to purchase the course.