当前位置:首页 > 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 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div>…

vue实现下拉刷新组件

vue实现下拉刷新组件

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

uniapp如何将底部导航组件化

uniapp如何将底部导航组件化

在 uniapp 中将底部导航组件化 将底部导航组件化可以提高代码复用性和维护性。以下是具体实现方法: 创建自定义底部导航组件 新建一个组件文件,例如 tab-bar.vue,放置在 compon…

vue VUE实现日历组件功能

vue VUE实现日历组件功能

Vue 日历组件实现方法 基础日历结构 使用Vue的模板语法构建日历的HTML结构,通常包含头部(年月显示、切换按钮)和日历表格(星期标题和日期格子)。 <template> <…

vue实现广告组件

vue实现广告组件

vue实现广告组件的方法 使用动态组件实现 在Vue中可以通过动态组件的方式加载广告组件,根据不同的条件展示不同的广告内容。动态组件使用<component :is="currentCompon…

vue radio组件实现

vue radio组件实现

Vue Radio 组件实现 在 Vue 中实现 Radio 组件可以通过原生 HTML 的 <input type="radio"> 结合 Vue 的响应式特性来完成。以下是几种常见的实…