perf(*): 创作工作台 - 优化首页按需加载与画布交互并修复历史迁移冲突

This commit is contained in:
ddCat committed 2026-09-05 13:24:10 +08:00
1 parent ca7ad1f9b2
commit 711d1b79eb
107 files changed
+3025 -1089

No files matched your search

+3 -2
View File
@@ -23,6 +23,7 @@ type VideoPlayerProps = {
/** Explicitly marks videos known to have an audio track (or not). */
hasAudio?: boolean;
onCanPlay?: MediaPlayerProps["onCanPlay"];
onPlay?: MediaPlayerProps["onPlay"];
};
const zhCNTranslations = {
@@ -73,7 +74,7 @@ const supportedVideoMimeTypes = new Set<VideoMimeType>(["video/mp4", "video/webm
* 统一视频播放表面,保留原生媒体 URL 契约,同时提供可访问的完整控件布局。
* 画布节点需要隔离播放器手势,避免拖动进度条时被误判为拖动画布。
*/
export function VideoPlayer({ src, mimeType, title = "视频", className, brandColor = "#f5f5f5", preload = "metadata", autoPlay = false, dataCanvasNoZoom = false, compactControls = false, hasAudio, onCanPlay }: VideoPlayerProps) {
export function VideoPlayer({ src, mimeType, title = "视频", className, brandColor = "#f5f5f5", preload = "metadata", autoPlay = false, dataCanvasNoZoom = false, compactControls = false, hasAudio, onCanPlay, onPlay }: VideoPlayerProps) {
const [detectedHasAudio, setDetectedHasAudio] = useState<boolean | undefined>(undefined);
const autoPlayAttemptedRef = useRef(false);
const audioProbeGenerationRef = useRef(0);
@@ -121,7 +122,6 @@ export function VideoPlayer({ src, mimeType, title = "视频", className, brandC
}
const volumeSlider = player.querySelector<HTMLElement>(".vds-volume-slider");
if (volumeSlider) {
(volumeSlider as HTMLElement & { disabled?: boolean }).disabled = noAudio;
volumeSlider.setAttribute("aria-disabled", String(noAudio));
}
}, [noAudio]);
@@ -188,6 +188,7 @@ export function VideoPlayer({ src, mimeType, title = "视频", className, brandC
data-no-audio={noAudio ? "true" : undefined}
style={{ "--video-brand": brandColor }}
onCanPlay={handleCanPlay}
onPlay={onPlay}
onLoadedMetadata={(event) => {
const provider = event.target.provider;
const media = isVideoProvider(provider) ? provider.media : undefined;