Promo Icon

⚡️ Limited Black Friday Deal

Get 50% off on the React Three Fiber Ultimate Course with the promo code ULTIMATE50

Buy Now

$85.00 $42.50

Portfolio 3D

Starter pack

Responsive

Peut-ĂŞtre redoutiez-vous ce moment mais il est temps de rendre notre site web responsive !

Maintenant, nous devons recréer tout ce que nous avons fait pour la version de bureau, mais pour mobile !

Je plaisante 🤭, nous allons utiliser certaines techniques pour que notre scène 3D soit belle sur mobile.

J'aimerais souligner qu'il n'existe pas de solution parfaite pour rendre une scène 3D responsive. Cela dépend de nombreux facteurs :

  • La complexitĂ© de la scène
  • Le nombre d'Ă©lĂ©ments
  • Les performances
  • Ce que vous voulez accomplir

Pour la partie CSS, nous rendrons facilement notre site web responsive avec des media queries.

useMobile

Nous allons utiliser deux techniques pour rendre notre scène 3D responsive :

  • Changer la position de base et l'Ă©chelle des Ă©lĂ©ments en fonction de la largeur disponible Ă  notre disposition. Après un certain seuil, nous passerons Ă  une version mobile.
  • Affiner la position et l'Ă©chelle des Ă©lĂ©ments en fonction d'un scaleFactor. Notre scène est parfaite sur un Ă©cran de 1980px mais qu'en est-il d'un Ă©cran de 1600px ? Nous utiliserons un scaleFactor pour ajuster la position et l'Ă©chelle des Ă©lĂ©ments afin de conserver le mĂŞme aspect visuel.

Créons un hook useMobile dans un dossier src/hooks pour gérer les deux techniques :

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,
  };
};

Nous utilisons le hook useState pour stocker les valeurs de scaleFactor et isMobile. Cela forcera un re-render lorsque les valeurs changeront.

Nous utilisons deux constantes pour définir la largeur parfaite que nous avons utilisée pour positionner nos éléments et le seuil mobile (quand nous passons à la version mobile).

J'ai choisi de ne pas utiliser la config pour ces variables afin de rendre ce hook réutilisable dans d'autres projets.

End of lesson preview

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