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
上次更新: 2024/08/14, 04:14:33