perf: 代码优化 components/Screenfull

This commit is contained in:
pany 2023-05-22 13:35:04 +08:00
parent 9c7fd02fb7
commit d66528f40a

View File

@ -1,5 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref, onUnmounted } from "vue" import { ref, watchEffect } from "vue"
import { ElMessage } from "element-plus" import { ElMessage } from "element-plus"
import screenfull from "screenfull" import screenfull from "screenfull"
@ -24,31 +24,34 @@ const props = defineProps({
const tips = ref<string>(props.openTips) const tips = ref<string>(props.openTips)
const isFullscreen = ref<boolean>(false) const isFullscreen = ref<boolean>(false)
const click = () => { const handleClick = () => {
const dom = document.querySelector(props.element) || undefined
if (!screenfull.isEnabled) { if (!screenfull.isEnabled) {
ElMessage.warning("您的浏览器无法工作") ElMessage.warning("您的浏览器无法工作")
return return
} }
const dom = document.querySelector(props.element) || undefined
screenfull.toggle(dom) screenfull.toggle(dom)
} }
const change = () => { const handleChange = () => {
isFullscreen.value = screenfull.isFullscreen isFullscreen.value = screenfull.isFullscreen
tips.value = screenfull.isFullscreen ? props.exitTips : props.openTips tips.value = screenfull.isFullscreen ? props.exitTips : props.openTips
} }
screenfull.on("change", change) watchEffect((onCleanup) => {
//
onUnmounted(() => { screenfull.on("change", handleChange)
//
onCleanup(() => {
if (screenfull.isEnabled) { if (screenfull.isEnabled) {
screenfull.off("change", change) screenfull.off("change", handleChange)
} }
}) })
})
</script> </script>
<template> <template>
<div @click="click"> <div @click="handleClick">
<el-tooltip effect="dark" :content="tips" placement="bottom"> <el-tooltip effect="dark" :content="tips" placement="bottom">
<svg-icon :name="isFullscreen ? 'fullscreen-exit' : 'fullscreen'" /> <svg-icon :name="isFullscreen ? 'fullscreen-exit' : 'fullscreen'" />
</el-tooltip> </el-tooltip>