 Screenfull全屏处理方案
Screenfull全屏处理方案
  # Screenfull 原理及方案分析
# 原理
浏览器提供了 API,提供了两个方法:
- Document.exitFullscreen()(opens new window):该方法用于请求从全屏模式切换到窗口模式
- Element.requestFullscreen()(opens new window):该方法用于请求浏览器(user agent)将特定元素(甚至延伸到它的后代元素)置为全屏模式
我们可以通过
document.getElementById('app').requestFullscreen()在获取id=app的DOM之后,把该区域置为全屏。但是该方法存在一定的小问题,比如:
appmain区域背景颜色为黑色
通常情况下我们不会直接使用该 API 来去实现全屏效果,而是会使用它的包装库 screenfull (opens new window)
# 方案
分为两步:
- 封装 - screenfull组件- 展示切换按钮
- 基于 screenfull (opens new window) 实现切换功能
 
- 在 - navbar中引入该组件
# 方案落地:screenfull
# 代码实现
封装 screenfull 组件:
- 下来依赖包 screenfull (opens new window) - npm i [email protected]1
- 创建 - components/Screenfull/index- <template> <div> <svg-icon :icon="isFullscreen ? 'exit-fullscreen' : 'fullscreen'" @click="onToggle" /> </div> </template> <script setup> import { ref, onMounted, onUnmounted } from 'vue' import screenfull from 'screenfull' // 是否全屏 const isFullscreen = ref(false) // 监听变化 const change = () => { isFullscreen.value = screenfull.isFullscreen } // 切换事件(利用插件完成切换操作) const onToggle = () => { screenfull.toggle() } // 设置侦听器 onMounted(() => { screenfull.on('change', change) }) // 删除侦听器 onUnmounted(() => { screenfull.off('change', change) }) </script> <style lang="scss" scoped></style>1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
在 navbar 中引入该组件:
<screenfull class="right-menu-item hover-effect" />
import Screenfull from '@/components/Screenfull'
1
2
2
上次更新: 2025/06/23, 07:26:12