首页 > 其他分享 >react解决电脑分辨率及缩放导致页面变形的问题

react解决电脑分辨率及缩放导致页面变形的问题

时间:2024-05-27 17:30:01浏览次数:22  
标签:styleSheets canvas scale 缩放 react document 页面

此处借鉴Vue3 解决电脑分辨率及缩放导致页面变形的问题-CSDN博客

新建devicePixelRatio.js:

/**
 * @description 校正windows页面在系统进行缩放后导致页面被放大的问题,通常放大比例是125%、150%
 * **/

 class DevicePixelRatio {
	constructor() {
	}
	//获取系统类型
	_getSystem() {
		let flag = false;
		var agent = navigator.userAgent.toLowerCase();
		if(agent.indexOf("windows") >= 0) {
			return true;
		}
	}
	//获取页面缩放比例
	_addHandler(element, type, handler) {
		if(element.addEventListener) {
			element.addEventListener(type, handler, false);
		} else if(element.attachEvent) {
			element.attachEvent("on" + type, handler);
		} else {
			element["on" + type] = handler;
		}
	}
	//校正浏览器缩放比例
	_correct() {
		let t = this;
		//页面devicePixelRatio(设备像素比例)变化后,计算页面body标签zoom修改其大小,来抵消devicePixelRatio带来的变化。
		document.getElementsByTagName('body')[0].style.zoom = 1 / window.devicePixelRatio;
	}
	//监听页面缩放
	_watch() {
		let t = this;
		t._addHandler(window, 'resize', function() { //注意这个方法是解决全局有两个window.resize
			//重新校正
			t._correct()
		})
	}
	//初始化页面比例
	init() {
		let t = this;
		if(t._getSystem()) { //判断设备,目前只在windows系统下校正浏览器缩放比例
			//初始化页面校正浏览器缩放比例
			t._correct();
			//开启监听页面缩放
			t._watch();
		}
	}
}
export default DevicePixelRatio;

上述js文件引入页面后,会出现echarts鼠标悬浮位置不准确的问题,使用下面的方式解决:

const bodyScale = () => {
  var devicewidth = document.documentElement.clientWidth; // 获取当前分辨率下的可视区域宽度
  var scale = devicewidth / 1920; // 分母——设计稿的尺寸
  document.body.style.zoom = scale; // 放大缩小相应倍数
  // 处理缩放导致canvas定位异常
  document.styleSheets[document.styleSheets.length - 1].insertRule('canvas {zoom: ' + 1 / scale + '}');
  document.styleSheets[document.styleSheets.length - 1].insertRule('canvas {transform: scale(' + scale + ')}');
  document.styleSheets[document.styleSheets.length - 1].insertRule('canvas {transform-origin: 0 0}');
};

项目使用的是Ant Design Pro脚手架,想要全局引入react项目中使全部页面生效,可以将下面的代码放入global.jsx中:

import DevicePixelRatio from '@/utils/devicePixelRatio.js'; // 解决电脑分辨率不同导致页面变形问题的工具类

const bodyScale = () => {
  var devicewidth = document.documentElement.clientWidth; // 获取当前分辨率下的可视区域宽度
  var scale = devicewidth / 1920; // 分母——设计稿的尺寸
  document.body.style.zoom = scale; // 放大缩小相应倍数
  // 处理缩放导致canvas定位异常
  document.styleSheets[document.styleSheets.length - 1].insertRule('canvas {zoom: ' + 1 / scale + '}');
  document.styleSheets[document.styleSheets.length - 1].insertRule('canvas {transform: scale(' + scale + ')}');
  document.styleSheets[document.styleSheets.length - 1].insertRule('canvas {transform-origin: 0 0}');
};

window.addEventListener('load', () => {
  // 解决电脑分辨率不同导致的页面变形问题
  new DevicePixelRatio().init();
  bodyScale();
})

需要注意的是:

如果使用了qiankun微服务,该应用是子应用,嵌入到主应用中时自适应效果不生效,可能是受到主应用中的配置影响,可以尝试在主应用中加入自适应方法查看效果,但是会影响主应用中页面模块的原有展示效果。另外,如果本身页面的字体已经很小,比如使用的11px、12px的字体大小,在电脑高分辨率的情况下,页面字体会显示的非常小,个人觉得用户体验不是很好。

标签:styleSheets,canvas,scale,缩放,react,document,页面
From: https://blog.csdn.net/u010234868/article/details/139232541

相关文章

  • react focus 事件
    reactfocus事件react官网中说:“在React中所有事件都会传播,除了onScroll,它仅适用于你附加到的JSX标签。”https://react.docschina.org/learn/responding-to-events#event-propagation那focus事件呢,原生focus事件可是非冒泡的functionMyInput(){functionhand......
  • 功能实现:canvas图片缩放与移动
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>canvas图片缩放与移动</ti......
  • react 脚手架
    react脚手架create-react-app(v5.0.1)临时安装create-react-app(node>14),通过create-react-app创建一个纯前端react项目npxcreate-react-appapp_01完成后package.json内容{"dependencies":{"@testing-library/jest-dom":"^5.17.0",......
  • React useState修改对象
    在React中,useState是一个Hook,它可以让函数组件拥有状态。当想要改变一个对象类型的状态时,我们需要使用展开运算符(...)或者Object.assign来确保状态是正确地更新。以下是一个使用useState来更新对象的例子://App.jsximportReact,{useState}from'react'f......
  • React useState数组新增和删除项
    在React中,我们可以使用useState钩子来管理组件的状态,其中包括数组。如何在React函数组件中对数组进行增加和删除项的操作?新增项时:我们可以对原数组进行解构,并把新增项一起加入到新数组;删除项时:我们使用Array.filter()进行筛选删除指定项,以下是一个简单的例子。//Ap......
  • 创建HTML简单页面
    一.<!--在vscode中用html语言编写一个html页面网站-->   <!--创建的页面主题为:端午那些事-->1.代码如下:2.上面的代码显示出的页面如下:3.因为不能发视频,所以粗糙地截了下图。解释:上面的带下划线的字体是可以跳转页面的,开始的五行是可以在通过锚点来跳转......
  • (读后分享)移动Web前端高效开发实战:HTML 5 + CSS 3 + JavaScript + Webpack + React Nat
    链接:pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqsoHTML5新特性与应用:介绍HTML5的新特性,包括语义化标签、本地存储、设备兼容、连接特性等,并讲解如何在移动Web前端开发中充分利用这些特性提升用户体验。CSS3样式与动画设计:详细讲解CSS3的样式设计和动画效果,包......
  • 2024年5月大语言模型论文推荐:模型优化、缩放到推理、基准测试和增强性能
    前一篇文章总结了关于计算机视觉方面的论文,这篇文章将要总结了2024年5月发表的一些最重要的大语言模型的论文。这些论文涵盖了塑造下一代语言模型的各种主题,从模型优化和缩放到推理、基准测试和增强性能。大型语言模型(llm)发展迅速,跟上这些领域新颖的研究将有助于引导模型的持续......
  • 使用Autofit.js和React实现自适应布局
    1.什么是Autofit.js?Autofit.js是一个用于自适应网页布局的JavaScript库,它可以根据元素的尺寸和屏幕的大小,自动调整布局和排列方式,以适应不同的设备和分辨率。它提供了简单易用的API,可以帮助我们轻松实现各种自适应效果。2.如何在React中使用Autofit.js?首先,我们需要安装......
  • 自适应/调整图片大小为页面大小
    SubResizeImagesToPageWidth()Application.ScreenUpdating=True'获取当前文档Setdoc=ActiveDocument'获取页面宽度并减去页边距Withdoc.PageSetuppgWidth=.PageWidth-.LeftMargin-.RightMarginEndWith'......