Surprise + capture en parallele : DSLR declenche pendant l'image surprise

- Preview stoppe AVANT la surprise (plus de frame flou)
- Capture DSLR lancee en meme temps que la surprise (apiPost en parallele)
- 800ms de reaction pendant que le DSLR travaille
- Flash + masquer surprise apres le declenchement

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-09-18 14:44:21 +02:00
parent 5f1a96ab8a
commit 812de8ae53
2 changed files with 16 additions and 8 deletions

View File

@@ -1146,7 +1146,7 @@
<script src="/js/websocket.js?v=16"></script> <script src="/js/websocket.js?v=16"></script>
<script src="/js/app.js?v=25"></script> <script src="/js/app.js?v=25"></script>
<script src="/js/camera.js?v=24"></script> <script src="/js/camera.js?v=25"></script>
<script src="/js/effects.js?v=4"></script> <script src="/js/effects.js?v=4"></script>
<script src="/js/gallery.js?v=5"></script> <script src="/js/gallery.js?v=5"></script>
<script src="/js/share.js?v=10"></script> <script src="/js/share.js?v=10"></script>

View File

@@ -316,22 +316,30 @@ async function lancerCapture() {
const avecPreMessages = (i === 0); const avecPreMessages = (i === 0);
await compteARebours(avecPreMessages); await compteARebours(avecPreMessages);
// Surprise : seulement en photo simple (pas strip/multi) // Stopper le preview AVANT la surprise (evite un frame flou visible)
// Affiche la surprise PUIS capture pendant que les gens reagissent arreterPreview();
const aSurprise = (modeActuel === 'simple') && montrerSurprise();
if (aSurprise) await pause(500);
// Flash blanc immédiat + lancer capture en parallèle // Surprise : seulement en photo simple (pas strip/multi)
// La capture DSLR se lance pendant que l'image surprise est affichee
const aSurprise = (modeActuel === 'simple') && montrerSurprise();
// Lancer la capture immediatement (le DSLR met ~1-2s a repondre)
const capturePromise = apiPost('/api/capturer').catch(() => null);
// Laisser la surprise visible pendant que le DSLR capture
if (aSurprise) await pause(800);
// Flash blanc au moment ou le DSLR a eu le temps de declencher
const flash = document.getElementById('flash-blanc'); const flash = document.getElementById('flash-blanc');
flash.classList.remove('cache'); flash.classList.remove('cache');
flash.style.animation = 'none'; flash.style.animation = 'none';
flash.offsetHeight; flash.offsetHeight;
flash.style.animation = ''; flash.style.animation = '';
arreterPreview();
let resultat = await apiPost('/api/capturer').catch(() => null);
if (aSurprise) { cacherSurprise(); prechargerSurprise(); } if (aSurprise) { cacherSurprise(); prechargerSurprise(); }
let resultat = await capturePromise;
if (!resultat && !resultat?.erreur) { if (!resultat && !resultat?.erreur) {
flash.classList.add('cache'); flash.classList.add('cache');
document.getElementById('capture-en-cours').classList.add('cache'); document.getElementById('capture-en-cours').classList.add('cache');