đïž ScĂšne de crime
Inspectez une piÚce. Chaque indice révÚle une vidéo. Vous reconstituez le crime.
Dans Mémento (2000), Christopher Nolan raconte une histoire à rebours. Le spectateur découvre les événements dans le désordre, reconstituant le puzzle narratif au fil du visionnage.
Mais Nolan dĂ©cide quand vous dĂ©couvrez chaque piĂšce du puzzle. Sur le web, câest vous qui explorez.
Imaginez une piĂšce remplie dâobjets. Chaque objet contient un souvenir, un fragment dâhistoire. Vous choisissez quel objet toucher, dans quel ordre explorer les souvenirs. La gĂ©ographie de lâĂ©cran devient une carte narrative.
Une chambre abandonnĂ©e. Des objets Ă©parpillĂ©s. Chacun contient un fragment de lâhistoire de la personne qui vivait ici. Survolez les objets pour dĂ©couvrir leurs souvenirs.
Vous avez reconstituĂ© une histoire Ă travers lâespace. Selon votre parcours :
MĂȘme histoire, mais votre gĂ©ographie narrative crĂ©e des Ă©motions diffĂ©rentes.
Au cinĂ©ma : Nolan dĂ©cide de lâordre des scĂšnes. La structure est fixe, mĂȘme si elle est non-linĂ©aire.
Sur le web : Vous ĂȘtes lâarchĂ©ologue. Vous dĂ©cidez dans quel ordre exhumer les souvenirs. Lâespace devient une dimension narrative.
đïž ScĂšne de crime
Inspectez une piÚce. Chaque indice révÚle une vidéo. Vous reconstituez le crime.
đš Galerie d'art
Chaque tableau raconte une partie dâune histoire. Lâordre de visite change lâinterprĂ©tation.
đ Constellation narrative
Des Ă©toiles dans lâespace. Reliez-les pour former votre propre constellation-histoire.
đ Esprit fragmentĂ©
La carte mentale dâune personne. Explorez ses pensĂ©es de maniĂšre non-linĂ©aire.
// Les objets de notre chambre, chacun avec son souvenirconst objets = { horloge: { video: document.querySelector('#video-horloge'), texte: "Il était toujours en retard. Cette horloge n'a jamais fonctionné.", position: { x: 100, y: 150 } },
photo: { video: document.querySelector('#video-photo'), texte: "Nous étions heureux ce jour-là . Nous ne savions pas encore.", position: { x: 300, y: 200 } },
livre: { video: document.querySelector('#video-livre'), texte: "Son roman préféré. Il l'a lu cent fois, cherchant toujours quelque chose.", position: { x: 500, y: 180 } },
lettre: { video: document.querySelector('#video-lettre'), texte: "La lettre qu'il n'a jamais envoyée. Ses mots les plus vrais, jamais dits.", position: { x: 250, y: 400 } }};
// Quel est l'ordre de découverte du spectateur ?let parcoursSouvenirs = [];// QUAND le spectateur survole l'horlogedocument.querySelector('#horloge').addEventListener('mouseenter', () => {
// Déclencher le souvenir associé objets.horloge.video.play();
// Afficher le texte du souvenir document.querySelector('#narration').textContent = objets.horloge.texte;
// Effet visuel : illuminer l'objet document.querySelector('#horloge').style.filter = 'brightness(1.5) drop-shadow(0 0 20px gold)';
// Enregistrer dans le parcours parcoursSouvenirs.push('horloge');
// EMBRANCHEMENT : Si c'est le premier objet touché if (parcoursSouvenirs.length === 1) { document.querySelector('#indication').textContent = "Vous commencez votre exploration..."; }});
// QUAND le spectateur quitte l'horlogedocument.querySelector('#horloge').addEventListener('mouseleave', () => {
// Mettre en pause le souvenir objets.horloge.video.pause();
// Retirer l'illumination document.querySelector('#horloge').style.filter = 'brightness(1)';
// Le texte reste (mémoire visuelle) // On ne l'efface pas, pour garder une trace});
// (MĂȘme logique pour photo, livre, lettre...)
// QUAND le spectateur a exploré tous les objetsfunction verifierParcoursComplet() { const objetsUniques = [...new Set(parcoursSouvenirs)];
if (objetsUniques.length === 4) { // TOUS les souvenirs ont été découverts // ALORS révéler la conclusion
document.querySelector('#conclusion').style.display = 'block';
// Message différent selon l'ordre d'exploration const ordre = parcoursSouvenirs.join('-');
if (ordre.startsWith('horloge')) { document.querySelector('#conclusion-texte').textContent = "Vous avez commencé par le temps. Logique. Chronologique. Comme lui.";
} else if (ordre.startsWith('lettre')) { document.querySelector('#conclusion-texte').textContent = "Vous avez commencé par la fin. Par ce qui n'a pas été dit.";
} else if (ordre.startsWith('photo')) { document.querySelector('#conclusion-texte').textContent = "Vous avez commencĂ© par le bonheur. Peut-ĂȘtre pour retarder le reste."; }
// Lancer la vidéo finale document.querySelector('#video-finale').play(); }}
// Appeler cette fonction Ă chaque survoldocument.querySelectorAll('.objet').forEach(objet => { objet.addEventListener('mouseenter', verifierParcoursComplet);});Ce code est une carte narrative :
parcoursSouvenirs)Ăquivalent Premiere/After Effects :
mouseenter/mouseleave = points dâentrĂ©e/sortie sur la timelinevideo.play() = lancer la lecture dâun clipparcoursSouvenirs = markers sur votre timeline qui enregistrent les choixChangez le comportement selon combien de temps le spectateur reste sur un objet :
let tempsDebut;
document.querySelector('#horloge').addEventListener('mouseenter', () => { tempsDebut = Date.now(); // ...});
document.querySelector('#horloge').addEventListener('mouseleave', () => { const tempsPasse = Date.now() - tempsDebut;
// SI le spectateur est restĂ© plus de 5 secondes if (tempsPasse > 5000) { // ALORS rĂ©vĂ©ler un dĂ©tail supplĂ©mentaire document.querySelector('#detail-cache-horloge').style.opacity = 1; }});CrĂ©ez des liens visuels entre les objets lorsquâils sont explorĂ©s dans un certain ordre :
// SI le spectateur touche la photo JUSTE APRĂS l'horlogeif (parcoursSouvenirs[parcoursSouvenirs.length - 2] === 'horloge' && parcoursSouvenirs[parcoursSouvenirs.length - 1] === 'photo') {
// ALORS dessiner une ligne entre les deux const ligne = document.createElement('div'); ligne.className = 'connexion'; ligne.style.position = 'absolute'; ligne.style.left = objets.horloge.position.x + 'px'; ligne.style.top = objets.horloge.position.y + 'px'; // ... calculs pour relier horloge et photo document.querySelector('#chambre').appendChild(ligne);}Ajoutez un son dâambiance dont le volume change selon la proximitĂ© de la souris :
document.addEventListener('mousemove', (geste) => {
// Pour chaque objet, calculer la distance avec la souris Object.keys(objets).forEach(nomObjet => { const objet = objets[nomObjet]; const distance = Math.sqrt( Math.pow(geste.clientX - objet.position.x, 2) + Math.pow(geste.clientY - objet.position.y, 2) );
// Plus on est proche, plus le son de l'objet est fort objet.audio.volume = Math.max(0, 1 - (distance / 300)); });});Au lieu de simplement play/pause, faites avancer la vidéo selon combien de temps on survole :
let intervalSurvol;
document.querySelector('#horloge').addEventListener('mouseenter', () => { // Chaque 100ms, avancer la vidéo de 0.5 secondes intervalSurvol = setInterval(() => { objets.horloge.video.currentTime += 0.5;
// Ne pas dépasser la durée totale if (objets.horloge.video.currentTime >= objets.horloge.video.duration) { objets.horloge.video.currentTime = 0; } }, 100);});
document.querySelector('#horloge').addEventListener('mouseleave', () => { clearInterval(intervalSurvol);});Comme un scrubbing manuel :
document.querySelector('#horloge').addEventListener('mousemove', (geste) => { // Obtenir la position relative dans l'objet (0 Ă 1) const rect = document.querySelector('#horloge').getBoundingClientRect(); const positionRelative = (geste.clientX - rect.left) / rect.width;
// Appliquer cette position à la vidéo objets.horloge.video.currentTime = positionRelative * objets.horloge.video.duration;});L'espace comme narration
La position des Ă©lĂ©ments nâest pas juste dĂ©corative, elle crĂ©e une gĂ©ographie narrative
Survol intelligent
mouseenter/mouseleave + mĂ©moire du parcours = rĂ©cit qui sâadapte Ă lâexploration
ContrÎle vidéo avancé
play(), pause(), currentTime, duration : synchroniser image et interaction
Le parcours comme récit
Se souvenir de lâordre dâexploration permet dâadapter la conclusion Ă chaque spectateur
Vous maĂźtrisez maintenant le regard, le choix, et lâespace. Il reste une dimension : le temps.
Dans le chapitre final, nous explorerons comment votre vitesse de dĂ©filement devient le rythme narratif avec âLa vitesse du tempsâ.