React中封装大屏自适应(拉伸)仿照 vue2-scale-box

news2024/11/28 20:51:03

0、前言

                        仿照   vue2-scale-box

1、调用示例

    <ScreenAutoBox width={1920} height={1080} flat={true}>
       {/* xxx代码 */}
    </ScreenAutoBox>

2、组件代码

import { CSSProperties, ReactNode, RefObject, useEffect, useRef, useState } from 'react'

//数据大屏自适应函数
const getTransform = (designWidth = 1920, designHeight = 1080, flat = true) => {
  const w = document.documentElement.clientWidth
  const h = document.documentElement.clientHeight
  if (flat) {
    //缩放比例(拉伸)
    return `scaleX(${w / designWidth}) scaleY(${h / designHeight}) translate(-50%, -50%)`
  } else {
    // 不拉伸
    return `scale(${w / h > designWidth / designHeight ? h / designHeight : w / designWidth}) translate(-50%, -50%)`
  }
}

export default function ScreenAutoBox({
  width = 1920,
  height = 1080,
  flat = true, // 是否拉伸
  children
}: {
  width?: number
  height?: number
  flat?: boolean
  children?: ReactNode
}) {
  const BoxRef: RefObject<HTMLDivElement> = useRef(null)
  const [transformValue, setTransformValue] = useState('scaleX(0) scaleY(0) translate(-50%, -50%)')

  useEffect(() => {
    setTransformValue(getTransform(width, height, flat))
    window.onresize = () => setTransformValue(getTransform(width, height, flat))
    // 销毁监听自适应消失
    return () => {
      window.onresize = null
    }
  }, [])

  const style: CSSProperties = {
    width: width + 'px',
    height: height + 'px',
    position: 'fixed',
    left: '50%',
    top: '50%',
    transformOrigin: '0 0',
    backgroundColor: 'transparent',
    zIndex: 100
  }
  return (
    <div ref={BoxRef} style={{ ...style, transform: transformValue }}>
      {children}
    </div>
  )
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1425329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

36万的售价,蔚来理想卖得,小米卖不得?

文 | AUTO芯球 作者 | 雷歌 Are you OK&#xff1f;雷军被网友们叫“小雷”&#xff01; 被网友一猜再猜的小米SU7的价格&#xff0c;因为一份保险上牌价格单的曝光被网友吵得热热闹闹&#xff0c;曝出的小米汽车顶配上牌保险价格为36.14万。 20万以下&#xff0c;人们愿称…

Java强训day13(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s sc.nextLine();char[] c s.toCharArray();int i 0;int t 0;while (i < c.length) {if (c[i] ! \") {…

【脑电信号处理与特征提取】P7-贾会宾:基于EEG/MEG信号的大尺度脑功能网络分析

基于EEG/MEG信号的大尺度脑功能网络分析 Q: 什么是基于EEG/MEG信号的大尺度脑功能网络分析&#xff1f; A: 基于脑电图&#xff08;EEG&#xff09;或脑磁图&#xff08;MEG&#xff09;信号的大尺度脑功能网络分析是一种研究大脑活动的方法&#xff0c;旨在探索脑区之间的功能…

qt内存自动释放的两种情况

qt内存管理机制 QObject的parent 我们时常能看到QWidget或者其他的控件的构造函数中有一项参数parent&#xff0c;默认值都为NULL&#xff0c;例如&#xff1a; QLineEdit(const QString &contents, QWidget *parent nullptr); QWidget(QWidget *parent nullptr, Qt::…

AI绘画探索人工智能的未来

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-8fL64RHWVzwpzR6m {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

MBR分区转换为GPT分区

这里有一个ecs-test用于测试MBR转换为GPT 新增一块数据盘 将数据盘以MBR分区格式分区 将整块磁盘以mbr形式分区 格式化&#xff0c;挂载等 上传文件&#xff0c;方便测试(以便后续转换格式类型&#xff0c;防止文件丢失) 取消挂载 将MBR转换为GPT 需先下载gdisk yum instal…

【每日一题】6.LeetCode——轮转数组

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢…

使用 axios 请求库,设置请求拦截

什么是 axios&#xff1f; 基于promise网络请求库&#xff0c;可以同构&#xff08;同一套代码可以运行在浏览器&#xff09;&#xff0c;在服务端&#xff0c;使用原生node.js的http模块&#xff0c;在客户端&#xff08;浏览器&#xff09;中&#xff0c;使用XMLHttpRequests…

鸿蒙开发教学-图片的引用

Image通过调用接口来创建&#xff0c;接口调用形式如下&#xff1a; Image(src: string | Resource | media.PixelMap)该接口通过图片数据源获取图片&#xff0c;支持本地图片和网络图片的渲染展示。其中&#xff0c;src是图片的数据源。 加载图片资源 Image支持加载存档图&…

开年3D第一爆,“恋与深空”网游周流水破1.5亿!底层技术其实是它!

“恋与深空”3D游戏最近在互联网频繁刷屏&#xff0c;首周流水更是破1.5亿&#xff0c;称得上2024新年第一爆。 图源网络&#xff0c;侵删 近些年2D游戏模式已经给网友带来倦怠&#xff0c;一部分网友开始寄希望于3D版本&#xff0c;但3D版本研发之初&#xff0c;大部分人其实…

LeetCode —— 17. 电话号码的字母组合

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

nodejs+vue+ElementUi电商购物个性化商城推荐系统gqfe

电本电商个性化推荐系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这二者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优…

3 分布式文件系统

3.1 什么是分布式文件系统 要理解分布式文件系统首先了解什么是文件系统。 查阅百度百科&#xff1a; 文件系统是负责管理和存储文件的系统软件&#xff0c;操作系统通过文件系统提供的接口去存取文件&#xff0c;用户通过操作系统访问磁盘上的文件。 下图指示了文件系统所处…

负载均衡下webshell连接

负载均衡下webshell连接、nginx解析漏洞、sql注入第一关&#xff08;三选一&#xff09; 负载均衡下webshell连接&#xff1a; 实验环境&#xff1a; 先下载一下蚁剑&#xff1a;https://github.com/AntSwordProject/AntSword-Labs 安装docker环境&#xff1a; 将蚁剑放在虚…

数据结构—循环队列

数据结构—循环队列 循环队列设计循环队列结构体的创建循环队列的初始化判空判满插入&#xff08;尾插&#xff09;出队列&#xff08;头删&#xff09;取队头元素取队尾元素空间的销毁 循环队列 一般在操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列可以…

Vulnhub-RIPPER: 1渗透

文章目录 一、前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、rips的使用三、获取密码文件四、日志审查五、提权 一、前言 由于在做靶机的时候&#xff0c;涉及到的渗透思路是非常的广泛&#xff0c;所以在写文章的时候都是挑重点来写&#xff0c;尽量的不饶…

nodejs+vue+ElementUi宠物领养救助网站0w6wc

宠物领养救助平台采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了vue框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户、宠物类别、宠物…

appsmith安装手记:5.Sql server数据库容器再安装(yml)

上次安装好了sql server容器&#xff0c;但是appsmith创建数据源出现连接错误&#xff1a; [2024-01-30 00:25:52,186] userEmailttapp.com, sessionIdb99a2476-5c35-4a71-9e8e-25c9c3292cfa, threadboundedElastic-38, requestIdea262c1d-722b-4176-aac7-4b062d7066b6 - Opera…

小白初探|神经网络与深度学习

一、学习背景 由于工作的原因&#xff0c;需要开展人工智能相关的研究&#xff0c;虽然不用参与实际研发&#xff0c;但在项目实施过程中发现&#xff0c;人工智能的项目和普通程序开发项目不一样&#xff0c;门槛比较高&#xff0c;没有相关基础没法搞清楚人力、财力如何投入&…

敏捷软件研发管理流程- scrum

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…