소스 검색

fix:
1、播放器全屏后esc退出问题修复
2、单路播放切换播放源后播放状态不对问题修复

NeeDaye 6 달 전
부모
커밋
e7aac9079e
2개의 변경된 파일56개의 추가작업 그리고 3개의 파일을 삭제
  1. 28 1
      src/pages/Play/components/SinglePlayer.tsx
  2. 28 2
      src/pages/Play/components/SyncPlayer.tsx

+ 28 - 1
src/pages/Play/components/SinglePlayer.tsx

@@ -1,5 +1,5 @@
 
-import React, { useRef, useState } from 'react';
+import React, { useEffect, useRef, useState } from 'react';
 import './style/index.less';
 import { Button } from 'antd';
 
@@ -112,9 +112,36 @@ const SyncVideoPlayer: React.FC<SyncVideoPlayerProps> = ({
     if (isPlaying) {
       videoRef.current?.load();
       audioRef.current?.load();
+      setIsPlaying(false);
     }
   };
 
+  useEffect(() => {
+    const handleFullscreenChange = () => {
+      setIsFullscreen(!!document.fullscreenElement);
+    };
+
+    const handleKeyDown = (e) => {
+      if (e.key === 'Escape' && isFullscreen) {
+        toggleFullscreen();
+      }
+    };
+
+    document.addEventListener('fullscreenchange', handleFullscreenChange);
+    document.addEventListener('webkitfullscreenchange', handleFullscreenChange);
+    document.addEventListener('mozfullscreenchange', handleFullscreenChange);
+    document.addEventListener('msfullscreenchange', handleFullscreenChange);
+    document.addEventListener('keydown', handleKeyDown);
+
+    return () => {
+      document.removeEventListener('fullscreenchange', handleFullscreenChange);
+      document.removeEventListener('webkitfullscreenchange', handleFullscreenChange);
+      document.removeEventListener('mozfullscreenchange', handleFullscreenChange);
+      document.removeEventListener('msfullscreenchange', handleFullscreenChange);
+      document.removeEventListener('keydown', handleKeyDown);
+    };
+  }, [isFullscreen]);
+
   return (
     <div style={{ display: 'flex', flexDirection: 'column', gap: '20px' }}>
       <div className="video-switcher">

+ 28 - 2
src/pages/Play/components/SyncPlayer.tsx

@@ -159,6 +159,32 @@ const SyncVideoPlayer: React.FC<SyncVideoPlayerProps> = ({
     };
   }, []);
 
+  useEffect(() => {
+    const handleFullscreenChange = () => {
+      setIsFullscreen(!!document.fullscreenElement);
+    };
+
+    const handleKeyDown = (e) => {
+      if (e.key === 'Escape' && isFullscreen) {
+        toggleFullscreen();
+      }
+    };
+
+    document.addEventListener('fullscreenchange', handleFullscreenChange);
+    document.addEventListener('webkitfullscreenchange', handleFullscreenChange);
+    document.addEventListener('mozfullscreenchange', handleFullscreenChange);
+    document.addEventListener('msfullscreenchange', handleFullscreenChange);
+    document.addEventListener('keydown', handleKeyDown);
+
+    return () => {
+      document.removeEventListener('fullscreenchange', handleFullscreenChange);
+      document.removeEventListener('webkitfullscreenchange', handleFullscreenChange);
+      document.removeEventListener('mozfullscreenchange', handleFullscreenChange);
+      document.removeEventListener('msfullscreenchange', handleFullscreenChange);
+      document.removeEventListener('keydown', handleKeyDown);
+    };
+  }, [isFullscreen]);
+
   return (
     <div className={`video-container ${isFullscreen ? 'fullscreen' : ''}`}>
       <div style={{ flex: 1, display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
@@ -166,7 +192,7 @@ const SyncVideoPlayer: React.FC<SyncVideoPlayerProps> = ({
           <video
             ref={topVideoRef}
             onEnded={togglePlay}
-            width={isFullscreen ? '1310' : '1150'}
+            width={isFullscreen ? '1410' : '1210'}
             height={isFullscreen ? '550' : '380'}
             style={{ objectFit: 'contain',backgroundColor: 'grey' }}
             muted
@@ -182,7 +208,7 @@ const SyncVideoPlayer: React.FC<SyncVideoPlayerProps> = ({
             <div key={pos} className="video-wrapper">
               <video
                 ref={pos === 'left' ? leftVideoRef : rightVideoRef}
-                width={isFullscreen ? '650' : '570'}
+                width={isFullscreen ? '700' : '600'}
                 height={isFullscreen ? '420' : '240'}
                 style={{ objectFit: 'contain', backgroundColor: 'grey' }}
                 muted