Skip to content
This repository was archived by the owner on Aug 18, 2021. It is now read-only.

Commit 5b8ba26

Browse files
author
qingyao.chen
committed
feat:add useFullScreen
1 parent 8066550 commit 5b8ba26

File tree

5 files changed

+124
-0
lines changed

5 files changed

+124
-0
lines changed

demo/componentList.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export default [
99
'useScroll',
1010
'useInViewport',
1111
'useDraggable',
12+
'useFullScreen',
1213
];

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export { default as useReactiveRef } from './useReactiveRef';
88
export { default as useScroll } from './useScroll';
99
export { default as useInViewport } from './useInViewport';
1010
export { default as useDraggable } from './useDraggable';
11+
export { default as useFullScreen } from './useFullScreen';
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { Component, ref } from 'vue';
2+
import useFullScreen from '../index';
3+
4+
export default {
5+
setup() {
6+
const divRef = ref(null);
7+
const [isDivFullScreen, itoggleDivFullScreen] = useFullScreen(divRef);
8+
9+
const imgRef = ref(null);
10+
const [, toggleImgFullScreen] = useFullScreen(imgRef);
11+
12+
const videoRef = ref(null);
13+
const [, toggleVideoFullScreen] = useFullScreen(videoRef);
14+
15+
return {
16+
isDivFullScreen,
17+
itoggleDivFullScreen,
18+
divRef,
19+
toggleImgFullScreen,
20+
imgRef,
21+
toggleVideoFullScreen,
22+
videoRef
23+
};
24+
},
25+
26+
render(_ctx) {
27+
return (
28+
<>
29+
<p>div</p>
30+
<div ref="divRef" style={{ color: '#613400', background: '#fff1b8' }}>
31+
<p>{_ctx.isDivFullScreen ? '全屏' : '非全屏'}</p>
32+
<button onClick={_ctx.itoggleDivFullScreen}>切换</button>
33+
</div>
34+
35+
<p>img</p>
36+
<div>
37+
<img ref="imgRef" style={{ width: 200 }} src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1606454660661&di=de25e03df6c307d3fe7769ca99463ba3&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F30%2F29%2F01300000201438121627296084016.jpg" />
38+
<button onClick={_ctx.toggleImgFullScreen}>切换</button>
39+
</div>
40+
41+
<p>video</p>
42+
<div>
43+
<video ref="videoRef" src="blob:https://baike.baidu.com/6a259dd0-aa95-42a2-b547-eecac222fcc1" />
44+
<button onClick={_ctx.toggleVideoFullScreen}>切换</button>
45+
</div>
46+
</>
47+
);
48+
},
49+
} as Component;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// import { mount } from '@vue/test-utils';
2+
// import { ref } from 'vue';
3+
// import useFullScreen from '../index';

src/useFullScreen/index.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { Ref, ref } from 'vue';
2+
3+
export default function useFullScreen(
4+
target: Ref<HTMLElement | Document | Window>
5+
) {
6+
const isFullScreen = ref(false) as Ref;
7+
8+
/**
9+
* document.fullscreenEnabled Standard
10+
* document.webkitfullscreenEnabled Chrome、Safari、Opera
11+
* document.mozfullscreenEnabled Firefox
12+
* document.msfullscreenEnabled IE、Edge
13+
*/
14+
const fullscreenEnabled = (document as any).fullscreenEnabled ||
15+
(document as any).webkitfullscreenEnabled ||
16+
(document as any).mozfullscreenEnabled ||
17+
(document as any).msfullscreenEnabled;
18+
19+
function toggleFullScreen() {
20+
if (!fullscreenEnabled) {
21+
alert('浏览器当前不能全屏');
22+
return
23+
}
24+
25+
/**
26+
* document.exitFullscreen Standard
27+
* document.webkitCancelFullScreen Chrome、Safari、Opera
28+
* document.mozCancelFullScreen Firefox
29+
* document.msExitFullscreen IE、Edge
30+
*/
31+
32+
// close the full screen
33+
if (isFullScreen.value) {
34+
if ((document as any).exitFullscreen) {
35+
(document as any).exitFullscreen();
36+
} else if ((document as any).webkitCancelFullScreen) {
37+
(document as any).webkitCancelFullScreen();
38+
} else if ((document as any).mozCancelFullScreen) {
39+
(document as any).mozCancelFullScreen();
40+
} else if ((document as any).msExitFullscreen) {
41+
(document as any).msExitFullscreen();
42+
}
43+
44+
isFullScreen.value = !isFullScreen.value
45+
return
46+
}
47+
48+
/**
49+
* document.requestFullscreen Standard
50+
* document.webkitRequestFullScreen Chrome、Safari、Opera
51+
* document.mozRequestFullScreen Firefox
52+
* document.msRequestFullscreen IE、Edge
53+
*/
54+
55+
// open the full screen
56+
const doc = target.value;
57+
if ((doc as any).requestFullscreen) {
58+
(doc as any).requestFullscreen();
59+
} else if ((doc as any).webkitRequestFullScreen) {
60+
(doc as any).webkitRequestFullScreen();
61+
} else if ((doc as any).mozRequestFullScreen) {
62+
(doc as any).mozRequestFullScreen();
63+
} else if ((doc as any).msRequestFullscreen) {
64+
(doc as any).msRequestFullscreen();
65+
}
66+
isFullScreen.value = !isFullScreen.value
67+
}
68+
69+
return [isFullScreen, toggleFullScreen]
70+
}

0 commit comments

Comments
 (0)