张延森 3 gadus atpakaļ
vecāks
revīzija
01619318f4
2 mainītis faili ar 47 papildinājumiem un 37 dzēšanām
  1. 33
    33
      src/pages/MonitoringScreen/hook.js
  2. 14
    4
      src/pages/MonitoringScreen/index.jsx

+ 33
- 33
src/pages/MonitoringScreen/hook.js Parādīt failu

@@ -1,49 +1,49 @@
1 1
 import React, { useCallback, useEffect, useRef, useState } from 'react';
2 2
 import useResize from '@/utils/hooks/useResize';
3 3
 
4
-export function useFullScreen() {
5
-  const [style, setStyle] = useState({});
4
+export function useFullScreen(elRef) {
6 5
   const [isFullScreen, setIsFullScreen] = useState(false);
7 6
   const fullScreenRef = useRef();
8 7
   fullScreenRef.current = isFullScreen;
9 8
 
10
-  const calcStyle = useCallback(() => {
11
-    const container = document.querySelector('main.ant-layout-content');
12
-    const header = container.querySelector('.ant-pro-page-container-warp');
13
-    const height = container.offsetHeight - header.offsetHeight;
14
-
15
-    setStyle({
16
-      width: '100%',
17
-      height: `${height}px`,
18
-    });
19
-  }, []);
20
-
21
-  const onFullScreen = useCallback((e) => {
22
-    document.documentElement.requestFullscreen();
23
-    setIsFullScreen(true);
24
-  }, []);
25
-
26
-  useResize((w, h) => {
27
-    if (fullScreenRef.current) {
28
-      calcStyle();
29
-    } else {
30
-      setStyle({
31
-        width: `${w}px`,
32
-        height: `${h}px`,
9
+  const toggleFullScreen = useCallback((e) => {
10
+    if (!document.fullscreenElement) {
11
+      elRef.current.requestFullscreen().then(() => {
12
+        setIsFullScreen(true);
33 13
       });
34 14
     }
15
+  }, []);
16
+
17
+  // useResize((w, h) => {
18
+  //   if (fullScreenRef.current) {
19
+  //     calcStyle();
20
+  //   } else {
21
+  //     setStyle({
22
+  //       width: `${w}px`,
23
+  //       height: `${h}px`,
24
+  //     });
25
+  //   }
35 26
 
36
-    setIsFullScreen(!fullScreenRef.current);
37
-  });
27
+  //   setIsFullScreen(!fullScreenRef.current);
28
+  // });
38 29
 
39 30
   useEffect(() => {
40
-    calcStyle();
31
+    console.log('-----fullscreenchange------>', elRef.current);
32
+    const handleFullScreenChange = (e) => {
33
+      console.log(
34
+        '-----handleFullScreenChange------>',
35
+        document.fullscreenElement,
36
+        fullScreenRef.current,
37
+      );
38
+      setIsFullScreen(document.fullscreenElement === fullScreenRef.current);
39
+    };
40
+
41
+    elRef.current.onfullscreenchange = handleFullScreenChange;
42
+
43
+    // elRef.current.addEventListener('fullscreenchange', handleFullScreenChange);
41 44
 
42
-    //
43
-    window.addEventListener('onFullScreenChange', (e) => {
44
-      console.log('-------onFullScreenChange----->', e);
45
-    });
45
+    return elRef.current.removeEventListener('fullscreenchange', handleFullScreenChange);
46 46
   }, []);
47 47
 
48
-  return { style, isFullScreen, onFullScreen };
48
+  return { isFullScreen, toggleFullScreen };
49 49
 }

+ 14
- 4
src/pages/MonitoringScreen/index.jsx Parādīt failu

@@ -14,12 +14,21 @@ import SquareBox from '@/components/ScreenBox/SquareBox';
14 14
 import ScreenHeader from '@/components/ScreenBox/ScreenHeader';
15 15
 
16 16
 export default (props) => {
17
-  const { style, isFullScreen, onFullScreen } = useFullScreen();
17
+  const screenRef = useRef();
18
+  const [height, setHeight] = useState('auto');
19
+  const { isFullScreen, toggleFullScreen } = useFullScreen(screenRef);
20
+
21
+  useEffect(() => {
22
+    const container = document.querySelector('main.ant-layout-content');
23
+    const header = container.querySelector('.ant-pro-page-container-warp');
24
+
25
+    setHeight(`${container.offsetHeight - header.offsetHeight}px`);
26
+  }, []);
18 27
 
19 28
   return (
20 29
     <PageHeaderWrapper
21 30
       extra={
22
-        <Button icon={<FullscreenOutlined />} onClick={onFullScreen}>
31
+        <Button icon={<FullscreenOutlined />} onClick={toggleFullScreen}>
23 32
           全屏
24 33
         </Button>
25 34
       }
@@ -28,7 +37,8 @@ export default (props) => {
28 37
         className={classNames(Styles['screen-page'], Styles['pd-lr-40'], {
29 38
           [Styles['full-screen']]: isFullScreen,
30 39
         })}
31
-        style={style}
40
+        style={{ height }}
41
+        ref={screenRef}
32 42
       >
33 43
         <div className={Styles['grail-layout']}>
34 44
           <div className={Styles['grail-header']}>
@@ -39,7 +49,7 @@ export default (props) => {
39 49
               <SquareBox>asdfasdf</SquareBox>
40 50
             </div>
41 51
             <div className={classNames(Styles['grail-content'], Styles['pd-lr-40'])}>
42
-              <DateCommponets />
52
+              <DateCommponetsLeft />
43 53
             </div>
44 54
             <div className={Styles['grail-right']}>
45 55
               <SquareBox>asdfasdf</SquareBox>