Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

  • Vue2

  • port

  • CSS

  • Node.js

  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

    • 教程

    • Vue Router

    • API

    • Vuex

    • 实例处理方案

      • 图标处理方案
      • 本地缓存处理方案
      • 响应拦截器处理方案
      • 登录鉴权处理方案
      • 退出登录处理方案
      • 国际化处理方案
      • 动态换肤处理方案
      • Screenfull全屏处理方案
        • Screenfull 原理及方案分析
          • 原理
          • 方案
        • 方案落地:screenfull
          • 代码实现
      • HeaderSearch 处理方案
      • TagsView处理方案
      • Guide 处理方案
      • Excel 导入处理方案
      • 打印详情处理方案
      • 权限受控处理方案
      • 动态表格处理方案
      • 富文本和markdown处理方案
      • 项目部署处理方案
      • 可视化处理方案
    • 文档

    • 用法

  • 性能优化

  • Axios

  • 状态管理

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • Vue3
  • 实例处理方案
HiuZing
2023-03-15
目录

Screenfull全屏处理方案

# Screenfull 原理及方案分析

# 原理

浏览器提供了 API,提供了两个方法:

  1. Document.exitFullscreen() (opens new window):该方法用于请求从全屏模式切换到窗口模式
  2. Element.requestFullscreen() (opens new window):该方法用于请求浏览器(user agent)将特定元素(甚至延伸到它的后代元素)置为全屏模式

我们可以通过 document.getElementById('app').requestFullscreen() 在获取 id=app 的 DOM 之后,把该区域置为全屏。

但是该方法存在一定的小问题,比如:appmain 区域背景颜色为黑色

通常情况下我们不会直接使用该 API 来去实现全屏效果,而是会使用它的包装库 screenfull (opens new window)

# 方案

分为两步:

  1. 封装 screenfull 组件

    1. 展示切换按钮
    2. 基于 screenfull (opens new window) 实现切换功能
  2. 在 navbar 中引入该组件

# 方案落地:screenfull

# 代码实现

封装 screenfull 组件:

  1. 下来依赖包 screenfull (opens new window)

    npm i [email protected]
    
    1
  2. 创建 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
上次更新: 2025/06/23, 07:26:12
动态换肤处理方案
HeaderSearch 处理方案

← 动态换肤处理方案 HeaderSearch 处理方案→

最近更新
01
CodePush
06-22
02
打包发布
03-09
03
常用命令
03-09
更多文章>
Theme by Vdoing | Copyright © 2021-2025 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式