Vue 3 全屏切换组件(附Demo)

devtools/2024/10/9 8:07:01/

目录

  • 1. 基本知识
  • 2. 拓展
  • 3. 延伸

1. 基本知识

在这里插入图片描述

全屏 API
document.documentElement.requestFullscreen():请求全屏模式
document.exitFullscreen():退出全屏模式
document.fullscreenElement:返回当前处于全屏状态的元素

基本的Demo如下:

<template><div @click="toggleFullscreen"><Icon :icon="isFullscreen ? 'exit-fullscreen-icon' : 'enter-fullscreen-icon'" /></div>
</template><script lang="ts" setup>javascript">
import { ref } from 'vue'const isFullscreen = ref(false)const toggleFullscreen = () => {if (!isFullscreen.value) {document.documentElement.requestFullscreen()} else {document.exitFullscreen()}isFullscreen.value = !isFullscreen.value
}
</script>

2. 拓展

为更好的简化代码,有可重用性

可使用如下Demo形式

<script lang="ts" setup>javascript">
import { Icon } from '@/components/Icon' // 导入图标组件
import { useFullscreen } from '@vueuse/core' // 导入全屏切换功能
import { propTypes } from '@/utils/propTypes' // 导入属性类型验证工具
import { useDesign } from '@/hooks/web/useDesign' // 导入设计相关的 hookdefineOptions({ name: 'ScreenFull' }) // 定义组件名称const { getPrefixCls } = useDesign() // 获取设计前缀const prefixCls = getPrefixCls('screenfull') // 生成带前缀的类名defineProps({color: propTypes.string.def('') // 定义 color 属性,默认值为空字符串
})const { toggle, isFullscreen } = useFullscreen() // 使用全屏功能const toggleFullscreen = () => {toggle() // 切换全屏状态
}
</script><template><div :class="prefixCls" @click="toggleFullscreen"> <!-- 点击切换全屏 --><Icon:color="color":icon="isFullscreen ? 'zmdi:fullscreen-exit' : 'zmdi:fullscreen'" :size="18"/></div>
</template>

在这个全屏组件的代码中,使用了组合 API 和 @vueuse/core 库的 useFullscreen 来简化全屏切换的逻辑

提供了简单的 toggle 方法和 isFullscreen 状态,减少了手动管理全屏状态的复杂性

3. 延伸

为更好的展示延伸Demo,此处的Demo展示过程示例:

  1. 创建项目:
vue create fullscreen-demo
cd fullscreen-demo
  1. 在项目中安装 @vueuse/core:npm install @vueuse/core

  2. 创建全屏组件

在 src/components 目录下创建 ScreenFull.vue 文件:

<template><div :class="prefixCls" @click="toggleFullscreen"><Icon:color="color":icon="isFullscreen ? 'zmdi:fullscreen-exit' : 'zmdi:fullscreen'":size="18"/></div>
</template><script lang="ts" setup>javascript">
import { ref } from 'vue'
import { useFullscreen } from '@vueuse/core'
import { Icon } from '@/components/Icon' // 确保你有一个图标组件const color = ref('') // 可自定义颜色
const prefixCls = 'screenfull' // 类名前缀const { toggle, isFullscreen } = useFullscreen() // 使用全屏 hookconst toggleFullscreen = () => {toggle() // 切换全屏
}
</script><style scoped>
.screenfull {cursor: pointer;display: flex;align-items: center;justify-content: center;width: 40px;height: 40px;
}
</style>
  1. 使用全屏组件
    在 src/App.vue 中使用刚创建的全屏组件:
<template><div id="app"><h1>全屏切换示例</h1><ScreenFull /></div>
</template><script lang="ts" setup>javascript">
import ScreenFull from './components/ScreenFull.vue' // 引入全屏组件
</script><style>
#app {text-align: center;margin-top: 50px;
}
</style>
  1. 创建图标组件
    在 src/components 目录下创建 Icon.vue 文件
    为了简化,使用了 SVG 图标:
<template><svg :width="size" :height="size" :fill="color"><use :xlink:href="icon"></use></svg>
</template><script lang="ts" setup>javascript">
import { defineProps } from 'vue'const props = defineProps({icon: String,color: String,size: {type: [String, Number],default: 24}
})
</script>
  1. 运行:npm run serve

http://www.ppmy.cn/devtools/123279.html

相关文章

西电25考研 VS 24考研专业课大纲变动汇总

01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合&#xff0c;这是因为工科要求都必须是8开头的专业课&#xff0c;里面参考课本还是没变的&#xff0c;无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…

CSS 图标和文本对齐

比如下面一段HTML代码&#xff0c;我们想在图标旁边显示文本或者数字 <body> <div><img src"smile.svg" alt"smile"><span>12</span></div> <div><img src"heartShape.svg" alt"…

免费送源码:Apache+B/S+Springboot+MySQL 商城综合项目自动化系统 计算机毕业设计原创定制

摘 要 目前电商系统商城项目管理极其频繁,迫切地需要自动化测试来代替人工繁琐而又重复的劳动。自动化测试相关的研究已经很多,但多数只是针对某一方面,比如单一接口或者单一页面或者性能等,而缺乏将接口、页面、持续集成系统和缺陷管理系统整合的自动化测试平台。本研究采用混…

elasticsearch创建索引

1对比关系型数据库&#xff0c;创建索引就等同于创建数据库 在postman中&#xff0c;向ES服务器发PUT请求 显示已经创建成功了 http://192.168.1.108:9200/shopping 请求方式get http://192.168.1.108:9200/shopping 请求全部的index的url地址 get 请求 http://192.168.1.10…

IvorySQL 西安站活动回顾|一键了解IvorySQL新兼容性

9月7日&#xff0c;IvorySQL社区携手中国开源软件联盟PostgreSQL分会&#xff0c;在古都西安成功举办PostgreSQL技术峰会及IvorySQL西安用户组成立仪式&#xff0c;现场吸引了众多西安PG圈技术爱好者和资深开发小伙伴们的热情参与&#xff01;&#x1f44f;&#x1f44f;&#…

对比 pandas 与 SQL

对比 pandas 与 SQL&#xff1a;使用 SQL 实现 pandas 的经典操作 在数据分析中&#xff0c;pandas 和 SQL 都是非常重要的工具。虽然它们工作在不同的环境中&#xff08;pandas 是 Python 的库&#xff0c;SQL 是查询数据库的语言&#xff09;&#xff0c;但许多操作是相似的…

API接口开发系列文章:构建高效、安全与可扩展的API服务

前言 在当今的数字化时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同系统、服务和应用的核心桥梁。无论是企业内部的数据交互&#xff0c;还是面向第三方的服务开放&#xff0c;API都扮演着至关重要的角色。本系列文章将深入探讨API接口开发的各个…

VSCode使用Code Runner插件运行时,路径错误问题

1. 问题介绍 由于Code Runner插件的工作目录与文件执行目录不同&#xff0c;而导致路径错误&#xff01; 示例演示&#xff1a; 创建根目录test-dir&#xff0c;然后在里面分别创建两个目录code和data&#xff0c;分别存放Python程序read_file.py和输入数据input.txt read_fi…