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

news2024/11/22 21:36:22

目录

  • 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>
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>
import { Icon } from '@/components/Icon' // 导入图标组件
import { useFullscreen } from '@vueuse/core' // 导入全屏切换功能
import { propTypes } from '@/utils/propTypes' // 导入属性类型验证工具
import { useDesign } from '@/hooks/web/useDesign' // 导入设计相关的 hook

defineOptions({ 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>
import { ref } from 'vue'
import { useFullscreen } from '@vueuse/core'
import { Icon } from '@/components/Icon' // 确保你有一个图标组件

const color = ref('') // 可自定义颜色
const prefixCls = 'screenfull' // 类名前缀

const { toggle, isFullscreen } = useFullscreen() // 使用全屏 hook

const 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>
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>
import { defineProps } from 'vue'

const props = defineProps({
  icon: String,
  color: String,
  size: {
    type: [String, Number],
    default: 24
  }
})
</script>
  1. 运行:npm run serve

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型进军医疗行业:实验揭示LLMs在临床建议中的表现

近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;如GPT-4等以其强大的自然语言处理能力&#xff0c;引发了科技界和公众的广泛关注。随着技术的不断进步&#xff0c;越来越多的人开始探索将LLMs应用于医疗行业&#xff0c;以期提高医疗服务的效率和质量。然而&…

第170天:应急响应-战中溯源反制对抗上线CSGoby蚁剑Sqlmap等安全工具

目录 案例一&#xff1a;溯源反制-Webshell工具-Antsword 案例二&#xff1a;溯源反制-SQL注入工具-SQLMAP 案例三&#xff1a;溯源反制-漏洞扫描工具-Goby 案例四&#xff1a;溯源反制-远程控制工具-CobaltStrike 反制Server&#xff0c;爆破密码&#xff08;通用&#x…

吴恩达演讲全文:AI Agent工作流的趋势

本文是吴恩达今年3月的演讲&#xff0c;题目为“Agentic Reasoning”&#xff0c;对AI Agent工作流的趋势进行了讲解。 本文对AI Agent翻译为了AI代理。 吴恩达指出&#xff0c;随着AI技术的发展&#xff0c;AI代理被视为一个能显著提升软件开发效率和质量的工具。 他通过展…

umi配置阿里云短信验证登录流程

首先 开通短信服务&#xff0c;融合认证&#xff0c;设置签名&#xff0c;模板&#xff0c;templateparams&#xff0c;调试板块可以发送成功并测试&#xff1b; s​​​​​​​​​​​​​​SendSmsVerifyCode_云通信号码认证服务_API调试-阿里云OpenAPI开发者门户 下图的s…

荆州团市委领导一行赴点赋科技公司参观考察

近日&#xff0c;荆州团市委书记熊燃、副书记陈杰一行前往点赋科技公司进行参观考察&#xff0c;为荆州科技领域与青年工作的交流合作开启新篇。 在考察过程中&#xff0c;熊燃书记和陈杰副书记深入点赋科技公司的办公区域、设备点位等进行实地走访。他们仔细聆听了公司董事长崔…

HUAWEI_HCIA_实验指南_Lib3.1_VLAN 基础配置及 Access 接口

1、原理概述 早期的局域网技术是基于总线型结构的。总线型拓扑结构是由一根单电缆连接着所有主机&#xff0c;这种局域网技术存在着冲突域问题&#xff0c;即所有用户都在一个冲突域中&#xff0c;那么同一时间内只有一台主机能发送消息&#xff0c;从任意设备发出的消息都会被…

Monad 101 杭州线下活动:解锁创新技术,引领低成本高效 DApp 开发之路!

以太坊等区块链在处理传统金融大规模交易时面临巨大挑战&#xff0c;有限的可扩展性成为阻碍其广泛应用的主要瓶颈。为了解决这一难题&#xff0c;并缩小传统金融与去中心化金融&#xff08;DeFi&#xff09;之间的差距&#xff0c;Keone 创立了 Monad。通过显著提升交易速度和…

STM32(十八):SPI通信

SPI通信&#xff1a; SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线 四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff09;、MOSI&#xff08;Master Output Slave Input&#xff09;主机输出从机输入、MISO&…

Idea 2024.2.3 找不到Cache Recovery设置

idea找不到官网所说的设置 下面是解决办法 1.找到对应位置 2.增加配置文件内容 idea.is.internaltrue3.重启idea 4.查看结果 解决方案原文

Android列表组件api

目录 1.ListView控件 1&#xff09;android:divider 2&#xff09;android:dividerHeight 3&#xff09;android:entries 4&#xff09;android:footerDividersEnabled 5&#xff09;android:headerDividersEnabled 6&#xff09;android:listSelector 7&#xff09;android:sc…

JavaScript Set 必备指南:深入理解 Set 的特性和方法

一. 了解 Set 1. 概念和用途 Set 是 JavaScript 中的一种集合&#xff08;collection&#xff09;数据结构&#xff0c;它类似于数组&#xff0c;但是集合中的元素是唯一的&#xff0c;不允许重复。Set 提供了一种存储不重复数值或对象的机制&#xff0c;可以用于存储一组唯一…

【03】手把手教你0基础部署SpringCloud微服务商城教学-Docker前置篇(附Linux虚拟机配置调试及Docker安装全流程)

前文回顾&#xff1a;【02】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇&#xff08;下&#xff09; 首先我们第一次看见这个东西&#xff0c;第一步就是需要知道它到底是用来干什么的&#xff1f; 简单来说&#xff0c;Docker就是一个快速构建、运行、管理应用的…

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP&#xff0c;然而却存在如下两问题&#xff1a; Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP&#xff0c;外部无法访问 这样对于访问这…

【干货】2024新学期期中考试,老师成绩发布工具

老师们别再为期中发成绩发愁了&#xff0c;我给各位带来了一个解决方案——易查分小程序&#xff0c;它可以将彻底改变您发布成绩的方式&#xff01;一分钟发布期中考试成绩。不管您是教育界的新手还是老手&#xff0c;易查分都能成为您的得力助手。它的界面既美观又实用&#…

大数据毕业设计选题推荐-音乐数据分析系统-音乐推荐系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

一些近期值得关注的存储和备份潜在漏洞

时刻保持警惕&#xff0c;及时、适时地检测暴露于安全建议和警告的相关设备&#xff0c;这一点对企业数据安全再重要不过了。 Continuity调研指出了最近几个月&#xff0c;存储和备份解决方案中存在的、可被攻击者发现和利用的潜在漏洞&#xff0c;包括&#xff1a; Veeam Ba…

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

必读内容&#x1f4d6; 如何寻找创新点&#xff1f;为什么要使用这个模块&#xff1f;如何才能提升模型的精度&#xff1f;这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了&#xff0c;这已经省去了大部分时间&#xff0c;但是当我们使用这些新的模块去优化已有…

LDR6500取电诱骗协议芯片:革新电子设备充电体验

在当今电子设备日新月异的时代&#xff0c;Type-C接口以其高效、便捷的特点迅速成为市场主流。这一接口不仅支持高速数据传输&#xff0c;还实现了正反插拔的便利性&#xff0c;极大地提升了用户体验。然而&#xff0c;在Type-C接口的广泛应用背后&#xff0c;一个关键的技术组…

Java日常开发小结-01

一、fastjson2 FastJson对于json格式字符串的解析主要用到三个类1.JSON&#xff1a;解析器&#xff0c;用于JSON格式字符串与JSON对象及javaBean之间的转换 2.JSONObject&#xff1a;json对象 3.JSONArray&#xff1a; json数组对象 1.1、引入依赖 <dependency><gr…

雷池社区版本SYSlog使用教程

雷池会对恶意攻击进行拦截&#xff0c;但是日志都在雷池机器上显示 如何把日志都同步到相关设备进行统一的管理和分析呢&#xff1f; 如需将雷池攻击日志实时同步到第三方服务器, 可使用雷池的 Syslog 外发 功能 启用 Syslog 外发 进入雷池 系统设置 页面, 配置 Syslog 设置…