开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
本文记录后台系统中常见功能ScreenFull (全屏) 的实现方法
浏览器已经提供了全屏对应的API
Document.exitFullscreen():Document.exitFullscreen() 方法用于让当前文档退出全屏模式
Element.requestFullscreen():Element.requestFullscreen() 方法用于发出异步请求使元素进入全屏模式
对id为app的元素调用全屏方法
其中部分区域背景颜色变为黑色
通常不会直接使用该API去实现全屏效果,而是使用它的包装库 screenfull <— 点击了解
安装screenfull
npm i screenfull
预期效果
未全屏
全屏
实现
封装一个组件,实现上述效果,因为全屏后图标会变化,所以定义一个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
}