From 96d017c21f73722ce71711ff37cce8f01d103c9a Mon Sep 17 00:00:00 2001 From: william Date: Tue, 25 Aug 2026 17:47:25 +0200 Subject: [PATCH] =?UTF-8?q?=C3=89vite=20de=20rejouer=20les=20d=C3=A9clench?= =?UTF-8?q?eurs=20"affichage"/l'animation=20quand=20on=20est=20d=C3=A9j?= =?UTF-8?q?=C3=A0=20sur=20l'=C3=A9cran=20cibl=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug remonté : cliquer sur une ligne de Répéteur "semblait recharger la page", et devenait impossible à recliquer une deuxième fois - alors que le graphe de logique voulu (modifier la donnée + rendre visible un détail + "Ouvrir la ligne cliquée") reste sur le MÊME écran que le Répéteur. Cause : showScreen() rejouait INCONDITIONNELLEMENT les déclencheurs "À l'affichage de l'écran" et relançait la timeline d'animation depuis le début à chaque appel - même quand l'écran cible est déjà celui affiché (le cas normal pour "Ouvrir la ligne cliquée" combinée à une action "Modifier un élément → Visibilité" sur le même clic, pensées pour fonctionner ensemble SUR le même écran qu'un Répéteur). Ça rejouait donc les animations d'entrée et pouvait faire repasser la visibilité à son état initial via un déclencheur "affichage", entrant en conflit avec l'action "Rendre visible" du même clic - d'où l'impression de rechargement, et le blocage : reflow/re-rendu qui se disputent avec l'état attendu. Fix : showScreen() ne fait plus rien du tout si l'écran ciblé est déjà celui affiché - aucun changement visuel à faire, donc aucune raison de rejouer son "premier affichage". Changer vers un écran DIFFÉRENT continue de tout rejouer normalement. Les trois actions du graphe restent déclenchées à chaque clic, sans plus se marcher dessus. Co-Authored-By: Claude Sonnet 5 --- templates/play.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/templates/play.html b/templates/play.html index 349d6fe8..fb406600 100644 --- a/templates/play.html +++ b/templates/play.html @@ -89,6 +89,18 @@ } function showScreen(id) { + // Déjà l'écran affiché : rien à refaire. Sans ce garde-fou, l'action + // "Ouvrir la ligne cliquée" (voir plus bas) — pensée pour révéler un + // détail SUR LE MÊME écran qu'un Répéteur, en la combinant avec une + // action "Modifier un élément → Visibilité" sur le même clic — rejouait + // à chaque clic sur une ligne les déclencheurs "À l'affichage de + // l'écran" et relançait la timeline d'animation depuis le début, ce qui + // donnait l'impression trompeuse d'un rechargement de page (éléments + // qui rejouent leur animation d'entrée, visibilité qu'un déclencheur + // "affichage" repasse à son état initial en écrasant l'action "Rendre + // visible" du même clic...). Aller vers un écran DIFFÉRENT continue de + // tout rejouer normalement, comme un vrai premier affichage. + if (id === window.currentScreenId) return; document.querySelectorAll('.playScreen').forEach(s => s.style.display = 'none'); const el = document.querySelector('.playScreen[data-screen-id="' + id + '"]'); if (el) {