当前位置:首页 > React

react 实现指定组件全屏

2026-01-27 19:11:03React

使用 React 实现组件全屏功能

原生全屏 API 方法

React 中可以通过调用浏览器的原生全屏 API 实现组件全屏。需要获取 DOM 元素的引用并使用 requestFullscreen 方法。

import { useRef } from 'react';

function FullScreenComponent() {
  const elementRef = useRef(null);

  const handleFullScreen = () => {
    if (elementRef.current) {
      if (elementRef.current.requestFullscreen) {
        elementRef.current.requestFullscreen();
      } else if (elementRef.current.webkitRequestFullscreen) { // Safari
        elementRef.current.webkitRequestFullscreen();
      } else if (elementRef.current.msRequestFullscreen) { // IE11
        elementRef.current.msRequestFullscreen();
      }
    }
  };

  const exitFullScreen = () => {
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.webkitExitFullscreen) { // Safari
      document.webkitExitFullscreen();
    } else if (document.msExitFullscreen) { // IE11
      document.msExitFullscreen();
    }
  };

  return (
    <div ref={elementRef} style={{ width: '100%', height: '100%' }}>
      <button onClick={handleFullScreen}>进入全屏</button>
      <button onClick={exitFullScreen}>退出全屏</button>
      {/* 其他组件内容 */}
    </div>
  );
}

使用 react-full-screen 库

第三方库 react-full-screen 提供了更简单的全屏功能实现方式,支持自定义组件全屏。

安装依赖:

react 实现指定组件全屏

npm install react-full-screen

使用示例:

import { useFullScreenHandle } from 'react-full-screen';

function App() {
  const handle = useFullScreenHandle();

  return (
    <div>
      <button onClick={handle.enter}>进入全屏</button>
      <button onClick={handle.exit}>退出全屏</button>

      <div style={{ backgroundColor: '#f0f0f0' }}>
        {handle.active ? (
          <div>当前处于全屏模式</div>
        ) : (
          <div>正常显示模式</div>
        )}
      </div>
    </div>
  );
}

样式调整注意事项

在全屏模式下,CSS 可能需要特殊处理以确保布局正确。可以使用 :fullscreen 伪类为全屏状态添加特定样式:

react 实现指定组件全屏

div:fullscreen {
  background-color: white;
  display: flex;
  justify-content: center;
  align-items: center;
}

浏览器兼容性处理

不同浏览器对全屏 API 的实现有差异,需要添加前缀处理。以下代码检测当前支持的全屏 API 版本:

const getFullscreenAPI = () => {
  if (document.documentElement.requestFullscreen) {
    return {
      enter: element => element.requestFullscreen(),
      exit: () => document.exitFullscreen(),
      change: cb => document.onfullscreenchange = cb
    };
  }
  // 处理其他浏览器前缀...
};

全屏事件监听

可以监听全屏状态变化事件来执行相应操作:

useEffect(() => {
  const handleChange = () => {
    console.log('全屏状态变化:', document.fullscreenElement !== null);
  };

  document.addEventListener('fullscreenchange', handleChange);
  return () => document.removeEventListener('fullscreenchange', handleChange);
}, []);

标签: 全屏组件
分享给朋友:

相关文章

vue实现组件循环图片

vue实现组件循环图片

Vue 中实现组件循环图片的方法 在 Vue 中,可以通过 v-for 指令循环渲染图片组件。假设有一组图片数据需要循环展示,可以采用以下方式: 数据准备 在组件的 data 或 props 中定义…

vue动态组件实现

vue动态组件实现

Vue 动态组件实现方法 使用 component 标签与 is 属性 通过 Vue 内置的 <component> 标签和 is 属性实现动态组件切换。is 的值可以是已注册的组件名或导…

vue实现下拉刷新组件

vue实现下拉刷新组件

Vue 下拉刷新组件实现 核心思路 通过监听 touch 事件计算滑动距离,结合 CSS 过渡动画实现下拉效果,触发刷新回调。 基础实现步骤 监听 touch 事件 在组件 mounted 阶段绑定…

uniapp 滑动组件

uniapp 滑动组件

uniapp 滑动组件实现方法 使用swiper组件 uniapp内置的swiper组件可以实现滑动效果,适用于轮播图或页面切换场景。 示例代码: <swiper :indicator-d…

vue实现tooltips组件

vue实现tooltips组件

实现基础 Tooltip 组件 创建一个名为 Tooltip.vue 的单文件组件,包含模板、样式和逻辑: <template> <div class="tooltip-con…

vue表格组件实现

vue表格组件实现

Vue表格组件实现 基础表格实现 使用el-table组件实现基础表格功能。安装Element UI后,引入el-table和el-table-column组件。 <template>…