Direction artistique, UI/UX et développement d’un prototype de portfolio pour un studio de production vidéo.
Concept
L’idée est d’avoir une pile d’images, positionnées selon la position du curseur par rapport au centre de l’écran, toutes plus décalées et floutées.

Technique
Explication


x = distanceX + index * (distanceX / total);y = distanceY + index * (distanceY / total);

Code
Pour accentuer l’effet de profondeur, j’ai rétréci et flouté chaque image selon son éloignement. Pour renforcer la perception du mouvement, l’éloignement de l’image affecte également sa vitesse de déplacement.
Voici, en résumé, le composant permettant de réaliser tout ceci.
// Déterminer la distance de la souris par rapport au centreconst distanceX = mousePosition.x - windowCenter.x;const distanceY = mousePosition.y - windowCenter.y;
return ( <div> {projects.map((project, index) => { // Changer l’index dynamiquement const fluidIndex = (index - activeProject + totalProjects) % totalProjects;
return ( <Image {...} src={project.image} style={{ // Définir les coordonnées d’origine top: windowCenter.y, left: windowCenter.x,
// Calculer tailles et décalages de chaque image // par rapport à son index transform: ` translateX(${distanceX + ((fluidIndex * (distanceX / totalProjects)) % windowCenter.x)}px) translateY(${distanceY + ((fluidIndex * (distanceY / totalProjects)) % windowCenter.y)}px)
scale(1.${totalProjects - fluidIndex})`,
// Plus l’image est en arrière plus elle est floue… filter: `blur(${fluidIndex * 0.4}px)`,
// …Et lente dans ses déplacements transitionDuration: `${fluidIndex * 0.1}s`, transitionProperty: "transform",
zIndex: -fluidIndex + totalProjects }} /> ); })} </div>);Résultat

Crédits
Typographie
- Romie par Margot Lévêque) ↗






