|
|
@@ -0,0 +1,45 @@
|
|
|
+<template>
|
|
|
+ <svg-icon
|
|
|
+ custom-class="w-2em h-2em"
|
|
|
+ :icon-name="
|
|
|
+ isFullScreen
|
|
|
+ ? 'ant-design:fullscreen-exit-outlined'
|
|
|
+ : 'ant-design:fullscreen-outlined'
|
|
|
+ "
|
|
|
+ @click="handleClick"
|
|
|
+ ></svg-icon>
|
|
|
+</template>
|
|
|
+<script lang="ts" setup>
|
|
|
+import screenfull from "screenfull";
|
|
|
+
|
|
|
+const isFullScreen = ref(false);
|
|
|
+const { proxy } = getCurrentInstance()!;
|
|
|
+
|
|
|
+function handleClick() {
|
|
|
+ // 检查浏览器是否支持全屏 API
|
|
|
+ if (!screenfull.isEnabled) {
|
|
|
+ proxy!.$message("浏览器不支持全屏 API");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ screenfull.toggle();
|
|
|
+}
|
|
|
+
|
|
|
+function updateFullscreenStatus() {
|
|
|
+ isFullScreen.value = screenfull.isFullscreen;
|
|
|
+}
|
|
|
+
|
|
|
+// 组件挂载完成后执行的生命周期钩子函数
|
|
|
+onMounted(() => {
|
|
|
+ if (screenfull.isEnabled) {
|
|
|
+ // 监听全屏状态变化事件
|
|
|
+ screenfull.on("change", updateFullscreenStatus);
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+onBeforeUnmount(() => {
|
|
|
+ if (screenfull.isEnabled) {
|
|
|
+ // 移除全屏状态变化事件的监听器
|
|
|
+ screenfull.off("change", updateFullscreenStatus);
|
|
|
+ }
|
|
|
+});
|
|
|
+</script>
|