66 lines
1.3 KiB
Vue
Raw Normal View History

<script lang="ts" setup>
2022-08-22 15:29:29 +08:00
import { ref, onUnmounted } from "vue"
import { ElMessage } from "element-plus"
import screenfull from "screenfull"
const props = defineProps({
/** 全屏的元素,默认是 html */
element: {
type: String,
default: "html"
},
/** 打开全屏提示语 */
openTips: {
type: String,
default: "全屏"
},
/** 关闭全屏提示语 */
exitTips: {
type: String,
default: "退出全屏"
}
})
const tips = ref<string>(props.openTips)
const isFullscreen = ref<boolean>(false)
2022-08-22 15:29:29 +08:00
const click = () => {
const dom = document.querySelector(props.element) || undefined
if (!screenfull.isEnabled) {
ElMessage.warning("您的浏览器无法工作")
return
}
screenfull.toggle(dom)
}
2022-08-22 15:29:29 +08:00
const change = () => {
isFullscreen.value = screenfull.isFullscreen
tips.value = screenfull.isFullscreen ? props.exitTips : props.openTips
2022-08-22 15:29:29 +08:00
}
screenfull.on("change", change)
onUnmounted(() => {
if (screenfull.isEnabled) {
screenfull.off("change", change)
}
})
</script>
<template>
<div @click="click">
<el-tooltip effect="dark" :content="tips" placement="bottom">
2022-08-22 15:29:29 +08:00
<svg-icon :name="isFullscreen ? 'fullscreen-exit' : 'fullscreen'" />
</el-tooltip>
</div>
</template>
2022-08-22 15:29:29 +08:00
<style lang="scss" scoped>
.svg-icon {
font-size: 20px;
&:focus {
outline: none;
}
}
</style>