perf(*): 创作工作台 - 优化首页按需加载与画布交互并修复历史迁移冲突
This commit is contained in:
1 parent
ca7ad1f9b2
commit
711d1b79eb
107 files changed
+3025
-1089
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user