+

-
-
分镜 {hf.index + 1} · {hf.timestamp.toFixed(2)}s
-
点击进入精细调整
+
+ 分镜 {hf.index + 1} · {hf.timestamp.toFixed(2)}s
,
@@ -674,7 +667,7 @@ export function ImageGenNode({ data, selected }: any) {
className="absolute inset-0 w-full h-full object-contain"
/>
- {/* 上推按钮:hover 时浮出 */}
+ {/* 上推按钮:常驻可见 */}
{d.onPushToStoryboard && (
@@ -724,38 +717,34 @@ export function ImageGenNode({ data, selected }: any) {
)}
- {/* Portal hover 大预览 — 浮在缩略图上方 */}
+ {/* Portal hover 预览 — 固定视口右下角,不遮挡 */}
{mounted && hover && job && (() => {
const [fi, ei] = hover.key.split("_")
const frameIdx = parseInt(fi, 10)
const p = elementCrops.find((x) => x.frameIdx === frameIdx && x.elementId === ei)
if (!p) return null
const vidAspect = job.height > 0 ? job.height / job.width : 16 / 9
- const maxH = Math.min(window.innerHeight * 0.7, hover.rect.top - 16)
- const maxW = Math.min(window.innerWidth * 0.6, 600)
- let h = maxH, w = h / vidAspect
- if (w > maxW) { w = maxW; h = w * vidAspect }
- const centerX = hover.rect.left + hover.rect.width / 2
- const left = Math.max(12, Math.min(window.innerWidth - w - 12, centerX - w / 2))
+ const w = 280
+ const h = w * vidAspect
return createPortal(
-
+

-
-
{p.name}
-
来自分镜 {p.frameIdx + 1}
+
+ {p.name}
+ 分镜 {p.frameIdx + 1}
,
diff --git a/web/components/storyboard-bar.tsx b/web/components/storyboard-bar.tsx
index 20da9c9..a6fcac3 100644
--- a/web/components/storyboard-bar.tsx
+++ b/web/components/storyboard-bar.tsx
@@ -213,34 +213,29 @@ export function StoryboardBar({ job, selectedFrames, focusedFrame, onFocusFrame,
)}
- {/* Hover 大图预览 · 浮在缩略图下方(不挡其他界面) */}
+ {/* Hover 预览 · 固定视口右下角,不遮挡 */}
{mounted && hover && (() => {
const vidAspect = job.height > 0 ? job.height / job.width : 16 / 9
- const maxH = Math.min(window.innerHeight * 0.7, window.innerHeight - hover.rect.bottom - 16)
- const maxW = Math.min(window.innerWidth * 0.6, 600)
- let h = maxH, w = h / vidAspect
- if (w > maxW) { w = maxW; h = w * vidAspect }
- const centerX = hover.rect.left + hover.rect.width / 2
- const left = Math.max(12, Math.min(window.innerWidth - w - 12, centerX - w / 2))
+ const w = 280
+ const h = w * vidAspect
return createPortal(
-
+

-
-
分镜 {hover.seq} · {hover.frame.timestamp.toFixed(2)}s
-
点击进入编排
+
+ 分镜 {hover.seq} · {hover.frame.timestamp.toFixed(2)}s
,