From e9fc855a1c71d34c55c4c79f4dc415462705aa0a Mon Sep 17 00:00:00 2001 From: huojiarong Date: Wed, 5 Aug 2026 12:58:08 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=82=E6=95=B0=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E6=B5=AE=E5=B1=82=E6=BB=9A=E5=8A=A8=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/ParameterTable.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/frontend/src/ParameterTable.tsx b/frontend/src/ParameterTable.tsx index 640cd46..36b5d15 100644 --- a/frontend/src/ParameterTable.tsx +++ b/frontend/src/ParameterTable.tsx @@ -299,12 +299,20 @@ export function ParameterTable({ }; useEffect(() => { - const dismissOnViewportChange = () => dismissHelpPreview(); - window.addEventListener("scroll", dismissOnViewportChange, true); - window.addEventListener("resize", dismissOnViewportChange); + const dismissOnScroll = () => { + // Programmatic hover may scroll a lower row into view after mouseenter. + // Keep that row's pending preview alive; mouseleave will still cancel it + // if scrolling moves the pointer outside the name cell. + if (helpPreviewTimerRef.current === null) { + helpPreviewAnchorRef.current = null; + setHelpPreview(null); + } + }; + window.addEventListener("scroll", dismissOnScroll, true); + window.addEventListener("resize", dismissHelpPreview); return () => { - window.removeEventListener("scroll", dismissOnViewportChange, true); - window.removeEventListener("resize", dismissOnViewportChange); + window.removeEventListener("scroll", dismissOnScroll, true); + window.removeEventListener("resize", dismissHelpPreview); if (helpPreviewTimerRef.current !== null) { window.clearTimeout(helpPreviewTimerRef.current); helpPreviewTimerRef.current = null;