后台ScreenFull(全屏)实现

241 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

本文记录后台系统中常见功能ScreenFull (全屏) 的实现方法

浏览器已经提供了全屏对应的API

Document.exitFullscreen()Document.exitFullscreen()  方法用于让当前文档退出全屏模式

Element.requestFullscreen()Element.requestFullscreen()  方法用于发出异步请求使元素进入全屏模式

对id为app的元素调用全屏方法

5.png

quanping.png

其中部分区域背景颜色变为黑色

通常不会直接使用该API去实现全屏效果,而是使用它的包装库 screenfull <— 点击了解

安装screenfull

npm i screenfull

预期效果

未全屏

6.png

全屏

7.png

实现

封装一个组件,实现上述效果,因为全屏后图标会变化,所以定义一个boolean变量表示是否全屏,由该值确定显示哪个图标

<template>
  <div>
    <svg-icon
      :icon="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
    />
  </div>
</template>

<script setup>
import { ref } from 'vue'
import screenfull from 'screenfull'

// 是否全屏
const isFullscreen = ref(false)


</script>

<style lang="scss" scoped></style>

接下来绑定点击事件,点击后全屏,再次点击退出

<template>
  <div @click="onToggle">
    <svg-icon
      :icon="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
    />
  </div>
</template>

<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import screenfull from 'screenfull'

// 是否全屏
const isFullscreen = ref(false)

// 切换事件
const onToggle = () => {
  screenfull.toggle()
}

</script>

<style lang="scss" scoped></style>

这时已经实现了全屏和退出全屏,但是图标没有变化,接下来实现每次点击后,修改isFullscreen的值

我们可以监听screenfull的变化,每次监听到变化后,执行回调函数

onMounted时绑定监听

// 设置侦听器
onMounted(() => {
  screenfull.on('change', change)
})

onUnmounted时解除监听


// 删除侦听器
onUnmounted(() => {
  screenfull.off('change', change)
})

监听到变化后,执行change函数,改变isFullscreen的值即可


// 监听变化
const change = () => {
  isFullscreen.value = screenfull.isFullscreen
}

8.png