You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

150%缩放下全屏模式检测失效 React如何实现全缩放级别兼容的全屏检测?

React兼容全缩放级别的全屏检测方案

原方案问题分析

原实现通过比对window.innerHeight与window.screen.height判断全屏的逻辑,会受页面缩放比例影响:页面缩放后逻辑像素和物理像素的映射关系发生变化,导致高度比对的结果失准,无法正确识别全屏状态。

最优解决方案:使用浏览器原生Fullscreen API

该方案基于W3C标准的全屏API实现,状态由浏览器底层直接维护,完全不受页面缩放、设备像素比、分辨率的影响,检测准确率100%。

实现代码

可以封装为通用的React自定义Hook,方便所有组件调用:

import { useState, useEffect } from 'react';

// 全屏检测自定义Hook
function useFullScreenDetect() {
  const [isFullScreen, setIsFullScreen] = useState(false);

  useEffect(() => {
    // 检测当前全屏状态
    const checkFullStatus = () => {
      // 标准属性判断,存在全屏元素即处于全屏状态
      setIsFullScreen(!!document.fullscreenElement);
    };

    // 组件挂载时先初始化一次状态
    checkFullStatus();

    // 监听全屏切换事件,状态变化时自动更新
    document.addEventListener('fullscreenchange', checkFullStatus);

    return () => {
      document.removeEventListener('fullscreenchange', checkFullStatus);
    };
  }, []);

  return isFullScreen;
}

使用示例

在业务组件中直接调用即可获取实时全屏状态:

function App() {
  const isFullScreen = useFullScreenDetect();

  return (
    <div>
      <p>当前是否全屏:{isFullScreen ? '是' : '否'}</p>
    </div>
  );
}

低版本浏览器兼容处理

如果需要兼容旧版浏览器,可以补充前缀适配逻辑:

// 兼容多前缀的全屏状态检测
const checkFullStatus = () => {
  const fullEle = document.fullscreenElement 
    || document.webkitFullscreenElement 
    || document.mozFullScreenElement 
    || document.msFullscreenElement;
  setIsFullScreen(!!fullEle);
};

// 兼容多前缀的事件监听
const fullScreenEvents = [
  'fullscreenchange',
  'webkitfullscreenchange',
  'mozfullscreenchange',
  'MSFullscreenChange'
];
fullScreenEvents.forEach(event => {
  document.addEventListener(event, checkFullStatus);
});

// 销毁时同步移除所有事件监听
return () => {
  fullScreenEvents.forEach(event => {
    document.removeEventListener(event, checkFullStatus);
  });
};

方案优势

  • 不受任何页面缩放比例、系统设置影响,检测结果完全准确
  • 仅在全屏状态切换时触发回调,相比监听resize事件性能开销降低90%以上
  • 标准API支持所有现代浏览器,兼容逻辑简单易维护

内容的提问来源于stack exchange,提问作者MPK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:03