Skip to content

Commit 9e0345c

Browse files
committed
[CORRECTION] LAB Reactions - Popover - Améliore le positionnement au scroll
1 parent 927cc7f commit 9e0345c

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

src/lib/composants/Reactions.svelte

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,43 @@
9797
}
9898
}
9999
100+
/**
101+
* Gère la position du popover lors du défilement de la page.
102+
* Recalcule et ajuste automatiquement la position verticale du popover
103+
* pour qu'il reste visible dans la fenêtre d'affichage.
104+
* Masque également le tooltip si celui-ci est affiché.
105+
*
106+
* @returns {void}
107+
*/
108+
function handlePopoverScroll() {
109+
if (!popoverShown || !popoverElement || !triggerButton) return;
110+
111+
tooltipShown = false;
112+
113+
const GAP = 4;
114+
115+
// Récupération des nouvelles dimensions après scroll
116+
const buttonRect = triggerButton.getBoundingClientRect();
117+
const popoverRect = popoverElement.getBoundingClientRect();
118+
const viewportHeight = window.innerHeight;
119+
const VERTICAL_MARGIN = 8;
120+
121+
// Recalcul de la position verticale
122+
let newTop = buttonRect.top - popoverRect.height - GAP;
123+
124+
// Ajustement vertical si nécessaire
125+
if (newTop < VERTICAL_MARGIN) {
126+
newTop = buttonRect.bottom + GAP;
127+
128+
if (newTop + popoverRect.height > viewportHeight - VERTICAL_MARGIN) {
129+
newTop = Math.max(VERTICAL_MARGIN, (viewportHeight - popoverRect.height) / 2);
130+
}
131+
}
132+
133+
// Application de la nouvelle position
134+
popoverElement.style.top = `${newTop}px`;
135+
}
136+
100137
/**
101138
* Gère le clic sur un bouton de réaction.
102139
*
@@ -187,6 +224,8 @@
187224
}
188225
</script>
189226

227+
<svelte:window onscroll={handlePopoverScroll} />
228+
190229
{#snippet boutonReaction({ id, emoji, compteur = null, actif = false })}
191230
<button
192231
{id}

0 commit comments

Comments
 (0)