当前位置: 首页 > news >正文

Vue3.5 企业级管理系统实战(十一):全屏切换组件

本篇主要探讨如何在导航栏(Navbar)中添加全屏切换按钮,并借助功能强大的 screenfull 插件,丝滑实现全屏切换功能,为用户打造更为便捷、流畅的交互体验。

1 安装插件 screenfull

screenfull 是一个轻量级的 JavaScript 库,用于简化在网页中实现全屏功能的操作。它屏蔽了不同浏览器在全屏 API 上的差异,提供统一且易用的接口,增强了跨浏览器兼容性。

 

使用时,首先通过 npm 或 yarn 安装该插件。其核心方法包括:request 用于请求指定元素进入全屏;exit 用于退出全屏;toggle 用于切换全屏状态。

例如,若要让 id 为 myDiv 的元素进入全屏,只需检查 screenfull.isEnabled 为 true 后,调用 screenfull.request(document.getElementById('myDiv')) 即可。此外,还能监听 change 事件,根据全屏状态变化执行相应逻辑。

通过 pnpm 安装 screenfull 插件,代码如下:

pnpm install screenfull

2 Screenfull 组件开发

在 src/components 下新建 Screenfull 文件夹,新建 index.vue 文件,代码如下:

//src/components/Screenfull/index.vue
<template>
  <!-- 定义一个 SVG 图标组件,用于切换全屏状态 -->
  <svg-icon
    @click="handleClick"
    custom-class="w-2em h-2em"
    :icon-name="
      isFullScreen
        ? 'ant-design:fullscreen-exit-outlined'
        : 'ant-design:fullscreen-outlined'
    "
  ></svg-icon>
</template>

<script lang="ts" setup>
// 引入 screenfull 库,用于处理全屏相关操作
import screenfull from "screenfull";
// 引入 Vue 的 ref 函数,用于创建响应式数据
import { ref, onMounted, onBeforeUnmount, getCurrentInstance } from "vue";

// 创建一个响应式变量 isFullScreen,用于记录当前是否处于全屏状态,初始值为 false
const isFullScreen = ref(false);
// 获取当前组件实例
const { proxy } = getCurrentInstance()!;

// 定义点击事件处理函数,用于处理图标点击时的操作
function handleClick() {
  // 检查浏览器是否支持全屏功能
  if (screenfull.isEnabled) {
    // 如果支持,切换全屏状态
    screenfull.toggle();
  } else {
    // 如果不支持,通过消息提示告知用户浏览器不支持全屏
    proxy!.$message("浏览器不支持全屏");
  }
}

// 定义更新全屏状态的函数,用于监听全屏状态变化并更新 isFullScreen 的值
function updateFullscreenStatus() {
  // 获取当前是否处于全屏状态,并更新 isFullScreen 的值
  isFullScreen.value = screenfull.isFullscreen;
}

// 组件挂载完成后执行的生命周期钩子函数
onMounted(() => {
  // 检查浏览器是否支持全屏功能
  if (screenfull.isEnabled) {
    // 如果支持,监听全屏状态变化事件,并在状态变化时调用 updateFullscreenStatus 函数
    screenfull.on("change", updateFullscreenStatus);
  }
});

// 组件即将卸载前执行的生命周期钩子函数
onBeforeUnmount(() => {
  // 检查浏览器是否支持全屏功能
  if (screenfull.isEnabled) {
    // 如果支持,移除对全屏状态变化事件的监听
    screenfull.off("change", updateFullscreenStatus);
  }
});
</script>

这段代码实现了一个切换全屏状态的功能,通过点击 SVG 图标来切换全屏和退出全屏,同时会根据当前的全屏状态显示不同的图标。并且在组件挂载和卸载时,分别添加和移除对全屏状态变化的监听。  

3 页面引用

在 src/layout/components/Navbar.vue 中引入 Screenfull 组件,代码如下:

//src/layout/components/Navbar.vue
<template>
  <div class="navbar" flex>
    <hamburger
      @toggleCollapse="toggleSidebar"
      :collapse="sidebar.opened"
    ></hamburger>
    <BreadCrumb></BreadCrumb>

    <div flex justify-end flex-1 items-center mr-20px>
      <screenfull mx-5px></screenfull>
    </div>
  </div>
</template>

<style scoped lang="scss">
.navbar {
  @apply h-[var(--navbar-height)];
}
</style>

<script lang="ts" setup>
import { useAppStore } from "@/stores/app";
// 在解构的时候要考虑值是不是对象,如果非对象解构出来就 丧失响应式了
const { toggleSidebar, sidebar } = useAppStore();
</script>

npm run dev 启动后,页面效果如下:

以上,全屏切换组件就完成了。

下一篇将继续探讨组件尺寸多语言实现,敬请期待~

http://www.dtcms.com/a/97047.html

相关文章:

  • 产生式系统的完整示例——医疗诊断系统(附python代码)
  • zookeeper部署教程
  • 如何自动化同义词并使用我们的 Synonyms API 进行上传
  • java项目之基于ssm的亚盛汽车配件销售业绩管理系统(源码+文档)
  • 【每日算法】Day 11-1:分治算法精讲——从归并排序到最近点对问题(C++实现)
  • [运维]Linux系统扩容磁盘空间-将未分配的空间进行整合分配
  • 规范Unity工程目录和脚本结构能有效提升开发效率、降低维护成本
  • FastBlock是一个专为全闪存场景设计的高性能分布式块存储系统
  • Pytroch搭建全连接神经网络识别MNIST手写数字数据集
  • 在MFC中使用Qt(四):使用属性表(Property Sheet)实现自动化Qt编译流程
  • idea设置全局maven配置 对新建项目生效
  • 前端 - ts - - declare声明类型
  • 【斯坦福】【ICLR】RAPTOR:基于树结构的检索增强技术详解
  • RHCE 第一次作业 25-3-28
  • 火山dts迁移工具使用
  • linux》》docker 、containerd 保存镜像、打包tar、加载tar镜像
  • Android OTA升级中SettingsProvider数据库升级的深度解析与完美解决方案
  • Android R adb remount 调用流程
  • okhttp3网络请求
  • 【Apache Hive】
  • springboot3 整合 Log4j2
  • python3面试题(元类、内存管理、函数)
  • Maven工具学习使用(六)——聚合与继承
  • 24、web前端开发之CSS3(一)
  • java对pdf文件分页拆分
  • 第十四届MathorCup高校数学建模挑战赛-C题:基于 LSTM-ARIMA 和整数规划的货量预测与人员排班模型
  • 股指期货的连续主力合约能不能代表这个股指期货?
  • 人体细粒度分割sapiens 实战笔记
  • 数据设计(范式、步骤)
  • kubernetes》》k8s》》 kubeadm、kubectl、kubelet