React 全屏问题解决方案

news/2024/9/17 7:16:40/ 标签: react.js, javascript, 全屏

1、全屏下弹窗被遮挡的问题

参考:https://www.jianshu.com/p/b22d1ad9533e

原因: 需要全屏的节点部分被传入 screenfull 中,弹窗的层级永远低于全屏,所以被遮挡。

解决方法
方式1:把整个 body 全屏,真正需要全屏的内容通过样式处理成全屏的样子。这样既可以利用全屏的ESC和自带的退出按钮,又不会存在遮挡弹窗的问题。
方式2:直接iframe嵌入,不会有遮挡问题,但加载会慢点

代码如下

const TestFullScreen: React.FC<Props> = props => {const reportContent = useRef<HTMLIFrameElement>(null);const [isFullscreen, setIsFullscreen] = useState(false);const fullScreen = () => {if (!document.fullscreenElement) {setIsFullscreen(false);}};useEffect(() => {// 监听全屏事件document.addEventListener('fullscreenchange', fullScreen);return () => {document.removeEventListener('fullscreenchange', fullScreen);};}, []);const onFullScreenClick = () => {// 把body全屏: 解决全屏下弹窗被遮挡的问题document.querySelector('body')?.requestFullscreen();// 需要全屏的内容通过样式处理setIsFullscreen(true);};return (<div className='test-fullscreen'><button onClick={onFullScreenClick}>全屏测试</button><div// 全屏时,通过fixed 铺满全屏className={isFullscreen? 'fixed z-[100] top-0 left-0 w-screen h-screen': 'h-full'}ref={reportContent}>{/* 有孩子节点就直接渲染,没有就iframe嵌入url */}{props?.children ? props.children : <iframe url={url} />}</div></div>);
};

2、退出后的元素的宽高还是全屏时的宽高

在退出全屏时,重新设置宽高

const fullScreen = () => {if (!document.fullscreenElement) {setIsFullscreen(false);// 当没有children时,为iframe嵌入,不会有这个问题,不需要处理if (reportContent.current && props?.children) {reportContent.current.style.width = '100%';reportContent.current.style.height = 'calc(100% - 40px)';}}
};

http://www.ppmy.cn/news/1522400.html

相关文章

如何在mac上玩使命召唤手游?苹果电脑好玩的第一人称射击游戏推荐

《使命召唤4&#xff1a;现代战争》&#xff08;Call of Duty 4: Modern Warfare&#xff09;是由Infinity Ward开发并于2007年发行的第一人称射击游戏。该游戏是《使命召唤》系列的第四部作品&#xff0c;是一款非常受欢迎的游戏之一&#xff0c;《使命召唤4&#xff1a;现代战…

JVM中运行时数据区

1.示例代码 无注释版本&#xff08;14行&#xff09; public class JVMMemoryModelDemo { private static int staticVar 10; private int instanceVar 20; public static void main(String[] args) { new JVMMemoryModelDemo().methodCall(); } public void method…

深度学习应用 - 自然语言处理(NLP)篇

序言 在信息技术的浩瀚星空中&#xff0c;深度学习犹如一颗璀璨的新星&#xff0c;正引领着人工智能领域的深刻变革。作为这一领域的核心分支&#xff0c;自然语言处理&#xff08; NLP \text{NLP} NLP&#xff09;更是借助深度学习的力量&#xff0c;实现了前所未有的飞跃。自…

【机器学习】朴素贝叶斯网络的基本概念以及朴素贝叶斯网络在python中的实例

引言 文章目录 引言一、朴素贝叶斯网络1.1 基本概念1.1.1 节点1.1.2 边&#xff08;Edges&#xff09;1.1.3 条件独立性 1.2 特点1.2.1 结构简单1.2.2 易于理解和实现1.2.3 计算效率高 1.3 应用1.4 数学表示1.5 局限性 二、朴素贝叶斯网络在python中的实例2.1 实例背景2.2 实现…

StyleGAN——生成风格化的视频内容,特别是在艺术视频或动画领域,可以将视频的视觉风格转换为特定的艺术风格

一、StyleGAN介绍 StyleGAN 是由 NVIDIA 研究团队开发的一种生成对抗网络&#xff08;GAN&#xff09;模型&#xff0c;专门用于生成高质量的图像。与传统的 GAN 不同&#xff0c;StyleGAN 引入了风格控制机制&#xff0c;可以通过改变生成过程中的特定特征来生成多样化的图像…

软件工程-图书管理系统的概要设计

软件概要设计说明书 目录 软件概要设计说明书 一、引言 1.1 编写目的 1.2 背景 1.3 定义 1.3.1特定对象 1.3.2专业术语 1.4 参考资料 二、总体设计 2.1 需求规定 2.1.1信息要求 2.1.2功能要求 2.2 运行环境 2.3 基本概要设计和处理流程 2.4 体系结构设计 2.5 模…

读懂以太坊源码(4)-详细解析节点配置文件geth.toml

要读懂以太坊源码&#xff0c;先熟悉配置文件的每个配置项也是非常有必要的&#xff0c;以下代码是以太坊主网配置文件(geth.toml)的完整内容&#xff0c;后面是对每个配置项的说明&#xff1a; [Eth] NetworkId 0 SyncMode "snap" EthDiscoveryURLs [] SnapDisc…

《Foundation 滑块》

《Foundation 滑块》 Foundation 滑块 是一款创新的网页设计工具,旨在为网站开发者提供一种简单、高效的方式来创建响应式、交互式的滑块效果。本文将详细介绍 Foundation 滑块的特点、使用方法以及其在现代网页设计中的应用。 一、Foundation 滑块简介 Foundation 是一个由…

PurchaseorderController

目录 1、 PurchaseorderController 1.1、 //审核采购单 1.2、 //反审核采购单 1.3、 //查询采购明细数据 1.4、 //删除采购订单 PurchaseorderController using QXQPS.Models; using QXQPS.Vo; using System; using System.Collections; using System.Collecti…

vue3 uni app端使用uCharts

uni-modules引入组件方法 在插件市场找到组件,直接引入项目 秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 引入后在uni-modules的目录如下 在页面使用时 <div id"app"><!-- 必须要有父元素包裹 --><div class"charts-box&qu…

前端缓存介绍以及实现方案

1.HTTP code 为304 HTTP 304 是一种服务器响应状态码&#xff0c;表示资源未被修改&#xff0c;客户端可以使用本地缓存**[浏览器内存缓存、本地电脑磁盘缓存]**的副本而不需要重新下载资源。这个过程通常涉及到浏览器向服务器发送请求&#xff0c;并在请求头中带有资源的 ETa…

【C/C++】web服务器项目开发总结【请求 | 响应 | CGI】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;背景 二&…

Windows自动化应用程序已启动/未启动,有进程无进程情况-拽起应用程序

问题分析: 应用程序能够自动登录, 可以打开后自动登录情况 我的处理方案是: 先通过 pywinauto打开应用程序, 然后,关闭前台 然后通过WinAppDriver去再次连接, 把应用置于前台 从而继续后面的元素定位 # 需要启动Hworkfrom pywinauto.application import Application# 启动Appli…

Java安全-动态加载字节码

文章目录 介绍定义ClassLoader简介 示例字节码文件URLClassLoaderdefineClassTemplatesImplBCEL ClassLoader 参考链接 介绍 定义 严格来说&#xff0c;Java字节码&#xff08;ByteCode&#xff09;其实仅仅指的是Java虚拟机执行使用的一类指令&#xff0c;通常被存储在.clas…

RabbitMQ 03 在项目中的实际使用: 告警,批处理

01.例子&#xff0c;解耦合&#xff08;使用异步&#xff09; 1.1异步思想&#xff1a;不会专门等待 1.2 例子&#xff1a;程序执行 1.3 如何设计程序 多线程&#xff1a; 订单请求模块只用于发送请求和处理确认&#xff0c;订单处理模块专门用于处理请求并且发送确认信…

MySQL常用函数(总结)详细版

1. 字符串函数 CONCAT(str1, str2, ...)&#xff1a;将多个字符串连接成一个字符串。 SELECT CONCAT(Hello, , World); LENGTH(str)&#xff1a;返回字符串的长度&#xff08;字节数&#xff09;。 SELECT LENGTH(Hello); SUBSTRING(str, pos, len)&#xff1a;从字符串 …

【JAVA】第四天

JAVA第四天 一、Object类二、Objects类三、包装类四、字符串修改 一、Object类 表格&#xff1a; 方法名作用public String toString()返回对象的字符串表示形式public boolean equals(Object o)判断两个对象是否相等protected Object clone​()对象克隆 注意 toString() 和…

某里227逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解…

【观察者】设计模式:构建灵活且响应式的软件系统

引言 在软件开发中&#xff0c;我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时&#xff0c;我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式&#xff0c;它定义…

C++——STL(vector类)

1.vector的介绍 vector的文档介绍 vector是表示可变大小数组的序列容器。vector就像数组一样&#xff0c;拥有连续的储存空间来储存元素&#xff0c;这就意味着可以通过下标的方式来访问vector的元素&#xff0c;很高效&#xff1b;但与数组不同的是vector的大小是动态改变的…