From 6d80c6f2f0fc45093b4f1a2fdb082459c336e766 Mon Sep 17 00:00:00 2001 From: mtvpls Date: Sat, 25 Apr 2026 09:53:18 +0800 Subject: [PATCH] =?UTF-8?q?videocard=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E7=9C=81=E7=95=A5=E6=97=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?tooptip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/MobileActionSheet.tsx | 47 +++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/src/components/MobileActionSheet.tsx b/src/components/MobileActionSheet.tsx index 667c480..10174e6 100644 --- a/src/components/MobileActionSheet.tsx +++ b/src/components/MobileActionSheet.tsx @@ -46,7 +46,9 @@ const MobileActionSheet: React.FC = ({ const [isVisible, setIsVisible] = useState(false); const [isAnimating, setIsAnimating] = useState(false); const [mounted, setMounted] = useState(false); + const [isTitleOverflowing, setIsTitleOverflowing] = useState(false); const backdropPressStarted = useRef(false); + const titleRef = useRef(null); // 确保组件在客户端挂载后才渲染 Portal useEffect(() => { @@ -136,6 +138,32 @@ const MobileActionSheet: React.FC = ({ } }, [isVisible]); + useEffect(() => { + const element = titleRef.current; + if (!element || !isVisible) { + setIsTitleOverflowing(false); + return; + } + + const checkOverflow = () => { + setIsTitleOverflowing(element.scrollWidth > element.clientWidth + 1); + }; + + checkOverflow(); + + if (typeof ResizeObserver === 'undefined') { + window.addEventListener('resize', checkOverflow); + return () => window.removeEventListener('resize', checkOverflow); + } + + const observer = new ResizeObserver(checkOverflow); + observer.observe(element); + + return () => { + observer.disconnect(); + }; + }, [isVisible, title]); + // ESC键关闭 useEffect(() => { const handleEsc = (e: KeyboardEvent) => { @@ -264,10 +292,21 @@ const MobileActionSheet: React.FC = ({ )}
-
-

- {title} -

+
+
+

+ {title} +

+ {isTitleOverflowing && ( +
+ {title} +
+
+ )} +
{sourceName && ( {origin === 'live' && (