2026-05-18-19-31-18 增加原始视频查看入口
This commit is contained in:
@@ -27,6 +27,12 @@ const resultCount = document.querySelector("#resultCount");
|
||||
const jobMeta = document.querySelector("#jobMeta");
|
||||
const detailDialog = document.querySelector("#detailDialog");
|
||||
const closeDialog = document.querySelector("#closeDialog");
|
||||
const openSourceButton = document.querySelector("#openSourceButton");
|
||||
const sourceDialog = document.querySelector("#sourceDialog");
|
||||
const closeSourceDialog = document.querySelector("#closeSourceDialog");
|
||||
const sourceTitle = document.querySelector("#sourceTitle");
|
||||
const sourceVideo = document.querySelector("#sourceVideo");
|
||||
const sourceImage = document.querySelector("#sourceImage");
|
||||
|
||||
const methodLabels = new Map();
|
||||
const methodDescriptions = new Map();
|
||||
@@ -68,12 +74,17 @@ function renderPreview(file) {
|
||||
previewEmpty.hidden = true;
|
||||
videoPreview.hidden = true;
|
||||
imagePreview.hidden = true;
|
||||
openSourceButton.hidden = false;
|
||||
if (file.type.startsWith("video/")) {
|
||||
videoPreview.src = currentObjectUrl;
|
||||
videoPreview.hidden = false;
|
||||
openSourceButton.textContent = "查看原始视频";
|
||||
sourceTitle.textContent = "原始视频";
|
||||
} else {
|
||||
imagePreview.src = currentObjectUrl;
|
||||
imagePreview.hidden = false;
|
||||
openSourceButton.textContent = "查看原始图像";
|
||||
sourceTitle.textContent = "原始图像";
|
||||
}
|
||||
jobMeta.textContent = `已选择 ${file.name}`;
|
||||
}
|
||||
@@ -213,6 +224,12 @@ function clearAll() {
|
||||
imagePreview.removeAttribute("src");
|
||||
videoPreview.hidden = true;
|
||||
imagePreview.hidden = true;
|
||||
sourceVideo.hidden = true;
|
||||
sourceImage.hidden = true;
|
||||
sourceVideo.removeAttribute("src");
|
||||
sourceImage.removeAttribute("src");
|
||||
openSourceButton.hidden = true;
|
||||
if (sourceDialog.open) sourceDialog.close();
|
||||
previewEmpty.hidden = false;
|
||||
resultGrid.innerHTML = "";
|
||||
emptyState.hidden = false;
|
||||
@@ -253,6 +270,20 @@ dropZone.addEventListener("drop", (event) => {
|
||||
sampleButton.addEventListener("click", loadSample);
|
||||
clearButton.addEventListener("click", clearAll);
|
||||
closeDialog.addEventListener("click", () => detailDialog.close());
|
||||
closeSourceDialog.addEventListener("click", () => sourceDialog.close());
|
||||
openSourceButton.addEventListener("click", () => {
|
||||
if (!selectedFile || !currentObjectUrl) return;
|
||||
sourceVideo.hidden = true;
|
||||
sourceImage.hidden = true;
|
||||
if (selectedFile.type.startsWith("video/")) {
|
||||
sourceVideo.src = currentObjectUrl;
|
||||
sourceVideo.hidden = false;
|
||||
} else {
|
||||
sourceImage.src = currentObjectUrl;
|
||||
sourceImage.hidden = false;
|
||||
}
|
||||
sourceDialog.showModal();
|
||||
});
|
||||
|
||||
form.addEventListener("submit", async (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
@@ -85,7 +85,10 @@
|
||||
<p class="eyebrow">Live Workspace</p>
|
||||
<h2>预览与结果</h2>
|
||||
</div>
|
||||
<div class="job-meta" id="jobMeta">等待输入</div>
|
||||
<div class="viewer-actions">
|
||||
<button class="ghost media-button" id="openSourceButton" type="button" hidden>查看原始视频</button>
|
||||
<div class="job-meta" id="jobMeta">等待输入</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="preview-stage" id="previewStage">
|
||||
@@ -144,6 +147,20 @@
|
||||
<dl class="detail-metrics" id="detailMetrics"></dl>
|
||||
</dialog>
|
||||
|
||||
<dialog class="detail-dialog source-dialog" id="sourceDialog">
|
||||
<div class="dialog-head">
|
||||
<div>
|
||||
<p class="eyebrow">Source Media</p>
|
||||
<h2 id="sourceTitle">原始视频</h2>
|
||||
</div>
|
||||
<button class="icon-button" id="closeSourceDialog" type="button" aria-label="关闭原始媒体">×</button>
|
||||
</div>
|
||||
<div class="source-stage">
|
||||
<video id="sourceVideo" controls hidden></video>
|
||||
<img id="sourceImage" alt="原始输入图像" hidden />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<template id="resultCardTemplate">
|
||||
<article class="result-card" tabindex="0">
|
||||
<div class="card-top">
|
||||
|
||||
@@ -367,6 +367,20 @@ input[type="range"] {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.viewer-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.media-button {
|
||||
min-height: 38px;
|
||||
padding: 0 12px;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.job-meta {
|
||||
color: var(--muted);
|
||||
font-size: 13px;
|
||||
@@ -603,6 +617,26 @@ dd {
|
||||
aspect-ratio: 4 / 3;
|
||||
}
|
||||
|
||||
.source-dialog {
|
||||
width: min(1180px, calc(100vw - 36px));
|
||||
}
|
||||
|
||||
.source-stage {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
min-height: 520px;
|
||||
background: #050605;
|
||||
}
|
||||
|
||||
#sourceVideo,
|
||||
#sourceImage {
|
||||
display: block;
|
||||
width: 100%;
|
||||
max-height: min(72vh, 720px);
|
||||
object-fit: contain;
|
||||
background: #050605;
|
||||
}
|
||||
|
||||
@media (max-width: 980px) {
|
||||
.app-shell {
|
||||
width: min(100vw - 20px, 760px);
|
||||
@@ -626,6 +660,10 @@ dd {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.viewer-actions {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.summary-strip,
|
||||
.detail-images {
|
||||
grid-template-columns: 1fr;
|
||||
|
||||
Reference in New Issue
Block a user