diff --git a/demo/componentList.ts b/demo/componentList.ts
index 69fe47e..9f80105 100644
--- a/demo/componentList.ts
+++ b/demo/componentList.ts
@@ -9,4 +9,5 @@ export default [
'useScroll',
'useInViewport',
'useDraggable',
+ 'useFullScreen',
];
diff --git a/src/index.ts b/src/index.ts
index 6ff6fc6..38a4b14 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -8,3 +8,4 @@ export { default as useReactiveRef } from './useReactiveRef';
export { default as useScroll } from './useScroll';
export { default as useInViewport } from './useInViewport';
export { default as useDraggable } from './useDraggable';
+export { default as useFullScreen } from './useFullScreen';
diff --git a/src/useFullScreen/__demo__/index.tsx b/src/useFullScreen/__demo__/index.tsx
new file mode 100644
index 0000000..2a817b8
--- /dev/null
+++ b/src/useFullScreen/__demo__/index.tsx
@@ -0,0 +1,58 @@
+import { Component, ref } from 'vue';
+import useFullScreen from '../index';
+
+export default {
+ setup() {
+ const divRef = ref(null);
+ const [isFull, { setFull, exitFull, toggleFull }] = useFullScreen(divRef);
+
+ const imgRef = ref(null);
+ const [, { toggleFull: toggleImgFullScreen }] = useFullScreen(imgRef);
+
+ const videoRef = ref(null);
+ const [, { toggleFull: toggleVideoFullScreen }] = useFullScreen(videoRef);
+
+ const onFull = () => {
+ console.log('进入全屏')
+ setFull()
+ }
+
+ return {
+ isFull,
+ onFull,
+ exitFull,
+ toggleFull,
+ divRef,
+ toggleImgFullScreen,
+ imgRef,
+ toggleVideoFullScreen,
+ videoRef
+ };
+ },
+
+ render(_ctx) {
+ return (
+ <>
+
div
+
+
{_ctx.isFull ? '全屏' : '非全屏'}
+
+
+
+
+
+ img
+
+

+
+
+
+ video
+
+
+
+
+ >
+ );
+ },
+} as Component;
diff --git a/src/useFullScreen/__test__/index.spec.tsx b/src/useFullScreen/__test__/index.spec.tsx
new file mode 100644
index 0000000..18d4368
--- /dev/null
+++ b/src/useFullScreen/__test__/index.spec.tsx
@@ -0,0 +1,3 @@
+// import { mount } from '@vue/test-utils';
+// import { ref } from 'vue';
+// import useFullScreen from '../index';
diff --git a/src/useFullScreen/index.ts b/src/useFullScreen/index.ts
new file mode 100644
index 0000000..62515a0
--- /dev/null
+++ b/src/useFullScreen/index.ts
@@ -0,0 +1,93 @@
+import { Ref, ref } from 'vue';
+
+interface Options {
+ setFull?: () => void;
+ exitFull?: () => void;
+ toggleFull?: () => void;
+}
+
+
+export default function useFullScreen(
+ target: Ref
+): [Ref, Options] {
+ const isFullScreen = ref(false);
+
+ /**
+ * document.fullscreenEnabled Standard
+ * document.webkitfullscreenEnabled Chrome、Safari、Opera
+ * document.mozfullscreenEnabled Firefox
+ * document.msfullscreenEnabled IE、Edge
+ */
+ const fullscreenEnabled = (document as any).fullscreenEnabled ||
+ (document as any).webkitfullscreenEnabled ||
+ (document as any).mozfullscreenEnabled ||
+ (document as any).msfullscreenEnabled;
+
+ /**
+ * document.requestFullscreen Standard
+ * document.webkitRequestFullScreen Chrome、Safari、Opera
+ * document.mozRequestFullScreen Firefox
+ * document.msRequestFullscreen IE、Edge
+ */
+ function setFull() {
+ if (!fullscreenEnabled) {
+ alert('浏览器当前不能全屏');
+ return
+ }
+
+ if (isFullScreen.value) {
+ return
+ }
+
+ const doc = target.value;
+ if ((doc as any).requestFullscreen) {
+ (doc as any).requestFullscreen();
+ } else if ((doc as any).webkitRequestFullScreen) {
+ (doc as any).webkitRequestFullScreen();
+ } else if ((doc as any).mozRequestFullScreen) {
+ (doc as any).mozRequestFullScreen();
+ } else if ((doc as any).msRequestFullscreen) {
+ (doc as any).msRequestFullscreen();
+ }
+ isFullScreen.value = !isFullScreen.value
+ }
+
+ /**
+ * document.exitFullscreen Standard
+ * document.webkitCancelFullScreen Chrome、Safari、Opera
+ * document.mozCancelFullScreen Firefox
+ * document.msExitFullscreen IE、Edge
+ */
+ function exitFull() {
+ if (!isFullScreen.value) {
+ return
+ }
+
+ if ((document as any).exitFullscreen) {
+ (document as any).exitFullscreen();
+ } else if ((document as any).webkitCancelFullScreen) {
+ (document as any).webkitCancelFullScreen();
+ } else if ((document as any).mozCancelFullScreen) {
+ (document as any).mozCancelFullScreen();
+ } else if ((document as any).msExitFullscreen) {
+ (document as any).msExitFullscreen();
+ }
+
+ isFullScreen.value = !isFullScreen.value
+ }
+
+ function toggleFull() {
+ if (!fullscreenEnabled) {
+ alert('浏览器当前不能全屏');
+ return
+ }
+
+ if (isFullScreen.value) {
+ exitFull()
+ } else {
+ setFull()
+ }
+ }
+
+ return [isFullScreen, { setFull, exitFull, toggleFull }]
+}