From fc6b901cff64d9cc6eeed6ec086669823ad1b1f4 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 6 Aug 2026 10:39:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AD=97=E4=BD=93=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=90=8E=E6=98=BE=E5=BC=8F=E8=A7=A6=E5=8F=91Canvas=E9=87=8D?= =?UTF-8?q?=E7=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 字体就绪后立即调用drawVideoTitle/drawNoVideoTitle 确保不依赖ResizeObserver才触发绘制 --- .../generate/components/PreviewVideoPanel.tsx | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx index ea74a1621..04e6a66f0 100644 --- a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx +++ b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx @@ -284,6 +284,13 @@ export const PreviewVideoPanel: React.FC = ({ // 优先用 document.fonts.check 精确检测目标字体 if (document.fonts.check(fontSpec)) { setFontLoaded(true) + // 字体已就绪,立即触发重绘 + requestAnimationFrame(() => { + if (!cancelled) { + drawVideoTitle() + drawNoVideoTitle() + } + }) return } @@ -292,17 +299,24 @@ export const PreviewVideoPanel: React.FC = ({ .load(fontSpec) .then(() => { if (!cancelled) { - // requestAnimationFrame 确保在下一帧绘制前字体已可用 requestAnimationFrame(() => { - if (!cancelled) setFontLoaded(true) + if (!cancelled) { + setFontLoaded(true) + // 字体加载完成,显式触发重绘 + drawVideoTitle() + drawNoVideoTitle() + } }) } }) .catch(() => { - // load 失败时回退到 fonts.ready if (!cancelled) { document.fonts.ready.then(() => { - if (!cancelled) setFontLoaded(true) + if (!cancelled) { + setFontLoaded(true) + drawVideoTitle() + drawNoVideoTitle() + } }) } })