公司老项目改造适配不同分辨率2k、3k、4k

news2024/11/25 5:03:48

项目改造适配不同分辨率

最近公司要做项目适配2k、3k、4k屏的分辨率,在网上找了很多中方案,常用且方便的是使用zoom全局缩放,因为是老项目所以对样式进行了重写整体使用了flex+百分比布局

  • 使用

1、在utils文件夹中新建一个zoom.js文件 这个是我自己设置的一个缩放比例,具体大小可根据实际项目具体效果微调

export function setRem () {
    // 2560*1440 2k
    // 2560*1600 2k
    // 3200*1800 3k
    // 3840*2160 4k
    // 3840/1920 = 2
    const max = window.innerWidth;
    if(max>=3840) {
        document.body.style.zoom = 2;
    }else if(max>=2600&&max<3840){
        document.body.style.zoom = 1.65;
    }else if(max>=2400&&max<2600){
        document.body.style.zoom = 1.36;
    }else if(max>=1900&&max<2400){
        document.body.style.zoom = 1;
    }else if(max>=1600&&max<1900){
     document.body.style.zoom = 0.8;
    }else if(max>=1200&&max<1600){
     document.body.style.zoom = max / 1600;
    }else if(max>=800&&max<1200){
     document.body.style.zoom = max/1600;
    }else if(max>=500&&max<800){
     document.body.style.zoom = max / 800
    }else{
     document.body.style.zoom = max / 450;
    }
}

2、在main.js中导入使用

import { setRem } from './utils/zoom';
setRem();

3、效果图
在这里插入图片描述
在这里插入图片描述
4、整体布局使用了flex布局或者使用百分比或者用elementui的栅格布局页面就不会乱在对整体内容的缩放效果就会很好。
在这里插入图片描述

适配后出现的其他问题

因为我这个项目中使用了好多echarts图表,全局使用zoom缩放导致echarts位置错位(比如鼠标经过饼图区域没反应或者鼠标经过饼图红色区域显示的是蓝色区域的数据等错位问题)

  • 定义一个容器用于存放echarts
//外层盒子
 <div class="pie-chart">
 		//echarts 容器
        <div id="pieCharts" :style="`width: 100%;height:100%; zoom:${zoomrAtio};transform:scale(${zoom});transform-origin:0px 0px;`" />
 </div>
  • 在data中定义两个变量
data() {
    return {
      zoom: '',
      zoomrAtio: '',
    };
  },
  • 在初始化容器后再进行添加
 getPieEcharts() {
      const _this = this;
      var pieData = _this.pieList.sort(_this.compare("value", false));
      const pieEcharts = this.$echarts.init(
        document.getElementById("pieCharts")
      );
      const option = {
        tooltip: {
          trigger: "item",
          borderWidth: 0,
          formatter: function (param) {
            return `${param.marker}${param.name}: ${param.value.toFixed(
              2
            )}kwh, 占比: ${param.percent}%`;
          },
          backgroundColor: "rgba(255,255,255,1)",
          extraCssText: "box-shadow:0 0 10px rgba(0,120,234,0.1);color:#333333;font-size:16px",
          textStyle: {
            fontSize: 24,
            lineHeight: 50,
          },
          padding: [5, 15],
        },
        color: [
          "#5570c6",
          "#91cc76",
          "#fac858",
          "#ed6666",
          "#73c0de",
          "#3ba272",
          "#fc8352",
          "#9a61b4",
          "#ecc49f",
        ],
        legend: {
          type: "plain",
          orient: "vertical",
          icon: "circle",
          show: true,
          right: "0%",
          top: "center",
          itemHeight: 10,
          itemGap: 10,
          formatter: function (name) {
            var total = 0;
            var target;
            for (var i = 0, l = _this.pieList.length; i < l; i++) {
              total += _this.pieList[i].value;
              if (_this.pieList[i].name === name) {
                target = _this.pieList[i].value;
              }
            }
            var arr = [];
            if (target === 0) {
              arr = ["{a|" + 0 + "%}", "{b|" + name + "\n}"];
            } else {
              arr = [
                "{a|" + ((target / total) * 100).toFixed(2) + "%}",
                "{b|" + name + "\n}",
              ];
            }
            return arr.join("\n");
          },
          textStyle: {
            // label: { show: true },
            color: this.echartfc,
            padding: this.pieList.length == 5 ? [0, 10, -10, 0] : [26, 10, -10, 0],
            rich: {
              a: {
                fontSize: 20,
                verticalAlign: "top",
                align: "left",
                lineHeight: 26,
                fontWeight: 400,
              },
              b: {
                fontSize: 14,
                align: "left",
                color: "#999999",
                lineHeight: this.pieList.length == 5 ? 14 : 30,
                padding: this.pieList.length == 5 ? [20, -10, 20, 0] : [0, -10, 20, 0],
              },
            },
          },
        },
        series: [
          {
            type: "pie",
            radius: "76%",
            center: ["35%", "50%"],
            data: pieData,
            // roseType: 'radius',
            // 最小的扇区角度(0 ~ 360),用于防止某个值过小导致扇区太小影响交互
            label: {
              show: false,
              position: "inside",
              formatter: "{b}:{d}%",
            },
            itemStyle: {
              shadowBlur: 10,
              shadowColor: "rgba(9, 45, 97, 0.2)",
              shadowOffsetX: 0,
              shadowOffsetY: 0,
            },
          },
        ],
      };
      pieEcharts.setOption(option);
      //上面的不用管
      //核心代码区域 zoom  zoomrAtio 变量一点要等echarts初始化完成后再加上才有效果,
      this.$nextTick(()=>{
        this.zoom =  document.body.style.zoom;
        this.zoomrAtio =  (1/document.body.style.zoom).toFixed(2);
      });
    },

添加上面代码后在不同分辨率情况下鼠标经过移动点击都能正常显示了

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

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

相关文章

ACL 2023 | 持续进化中的语言基础模型

尽管如今的 AI 模型已经具备了理解自然语言的能力&#xff0c;但科研人员并没有停止对模型的不断改善和理论探索。自然语言处理&#xff08;NLP&#xff09;领域的技术始终在快速变化和发展当中&#xff0c;酝酿着新的潮流和突破。 NLP 领域的顶级学术会议国际计算语言学年会 …

java中的三大集合类各自的特点以及适用场景

目录 ​编辑 三大容器的介绍 使用场景介绍 List 实现类 Map 实现类 Set 实现类&#xff1a; 三大容器的介绍 List&#xff08;列表&#xff09; 结构&#xff1a;由有序的元素序列组成&#xff0c;可以包含重复元素特点&#xff1a;可以通过索引访问元素&#xff0c;插入的顺…

SQL注入实操(更新中)

文章目录 一、sqli-lab靶场搭建二、通关笔记1.Less-1a.单引号‘b.updatexmlc.concatd.unione.information_schemaf.GROUP_CONCATg.select 1,2 2.Less-23.Less-3a.怎么找到注入点b.判断SQL注入漏洞的类型c.闭合语句d.如何判断显示位e.答案 4.Less-45.Less-5a.判断注入漏洞的依据…

PhpStudy2016-2018-RCE 漏洞复现

漏洞描述 PHPStudyRCE&#xff08;Remote Code Execution&#xff09;&#xff0c;也称为phpstudy_backdoor漏洞&#xff0c;是指PHPStudy软件中存在的一个远程代码执行漏洞。 漏洞影响范围 Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包&#xff0c;通过集成Apac…

WEB:shrine

背景知识 了解Flask SSIT模板注入 题目 进行代码审计 import flask import osapp flask.Flask(__name__) /*创建了flask包下的Flask类的对象&#xff0c;name是一个适用于多数情况的快捷方式。有了这个参数&#xff0c;Flask才知道在哪里可以找到模板和静态文件*/app.confi…

HYPE分布式水文模型教程

详情点击链接&#xff1a;HYPE分布式水文模型建模方法与案例分析 前言 HYPE(Hydrological Predictions for the Environment, HYPE)是由瑞典皇家水文气象局&#xff08;SMHI&#xff09;在HBV和HBV-NP模型基础上开发的新一代分布式水文模型&#xff0c;已经在全球众多地区得…

同样是办公管理系统,钉钉和OA哪个更出色?

企业在选择办公协同系统的时候&#xff0c;通常搜索到“钉钉”和“OA系统”&#xff0c;两者都属于办公管理类型&#xff0c;但哪个更适合企业使用&#xff1f;两者又有哪些区别呢&#xff1f;小编整理了一下两者的对比和侧重的点&#xff0c;今天我们就来聊聊两者的区别吧~ 天…

【Linux】inode软硬连接

文章目录 &#x1f4d6; 前言1. 文件系统1.1 磁盘的物理结构&#xff1a;1.2 CSH和LBA&#xff1a;1.3 IO的基本单位&#xff1a;1.4 文件系统结构&#xff1a;1.5 认识inode&#xff1a; 2. 软硬连接2.1 目录和文件的硬连接数&#xff1a;2.2 软连接&#xff1a;2.3 硬连接&am…

Clickhouse基础和基本优化

CK基础和基本优化 一、ClickHouse的特点列式存储高吞吐写入能力数据分区与线程级并行表引擎的使用MergeTreeReplacingMergeTreeSummingMergeTree 二、SQL操作1.Insert2.Update 和 Delete3.查询操作4.alter操作5.导出数据 三、基于表的分布式集群集群写入流程&#xff08; 3分片…

react和vue2/3父子组件的双向绑定(sync、emit、v-model)

目录 Vue .sync&#xff08;2.3.0&#xff09; $emit &#xff08;2.3后&#xff09; 自定义组件的 v-model 2.2.0 v-modelemits(3.0取消了.sync) React 父组件回调函数 相关基础 框架 MVC &#xff08;Model View Controller&#xff09;/MVP&#xff08;Model View…

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接&#xff1a;https://sysin.org/blog/virtualbox-7/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2022 年 10 月…

CentOS7中安装Mysql8并配置远程连接和修改密码等

场景 使用Vmware等虚拟机软件搭建CentOS7系统&#xff0c;需要在其上安装Mysql8版本数据库。 注&#xff1a; 博客&#xff1a;霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主 实现 1、去mysql官网手动下载rpm包并上传到服务器&#xff0c;或者直接通过wget…

Python结合Selenium简单实现Web自动化测试

这篇文章是入门级别的应用Python Selenium进行自动化测试&#xff0c;包括环境搭建及简单的实例&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 这篇文章是入门级别的应用Python Selenium进行自动化测试&#xff0c;包括环境搭建及简单的实例。基…

数据库及数据表的相关操作(一)

目录 一、管理逻辑库与数据表二、常用数据类型和约束2.1 数字数据类型2.2 字符串数据类型2.3 日期数据类型2.4 字段约束 三、索引运行机制和使用原则3.1 创建索引3.2 添加与删除索引3.3 索引的使用原则 一、管理逻辑库与数据表 sql语言的分类&#xff1a; ​ DML数据操作语言…

linux之Ubuntu系列(四)用户管理 用户和权限 chmod 超级用户root, R、W、X、T、S 软链接和硬链接 shell

r(Read&#xff0c;读取)&#xff1a;对文件而言&#xff0c;具有读取文件内容的权限&#xff1b;对目录来说&#xff0c;具有浏览目 录的权限。 w(Write,写入)&#xff1a;对文件而言&#xff0c;具有新增、修改文件内容的权限&#xff1b;对目录来说&#xff0c;具有删除、移…

linux之Ubuntu系列(-)常见指令 重定向

Ubuntu 中文 版本 注意点 通过修改语言改成英文 在终端录入&#xff1a;export LANGen_US 在终端录入&#xff1a;xdg-user-dirs-gtk-update 单用户和多用户 命令格式 command [-选项] [参数] –查看命令的帮助 命令 --help man 命令 |操作键| 功能| |空格键|-显示手册的下…

Kafka 入门到起飞系列 - 生产者发送消息流程解析

生产者通过producerRecord 对象封装消息主题、消息的value&#xff08;内容&#xff09;、timestamp(时间戳)等 生产者通过send()方法发送消息&#xff0c;send()方法会经过如下几步 1. 首先将消息交给拦截器&#xff08;Interceptor&#xff09;处理, 拦截器对生产者而言&…

Java编程-IDEA中Java的main方法psvm、sout快捷键设置

目的 我打出psvm这四个字母时&#xff0c;可快速打出main方法 我打出syso,sout时&#xff0c;可快速打出System.out.println(); 步骤&#xff1a; 1、打开IDEA&#xff0c;点击文件&#xff0c;选择Editor中的 Live Templates选项&#xff0c;点击右侧边栏中的 号 2、选中…

教你用Python+selenium搭建自动化测试环境

今天给大家带来的是关于Python的相关知识,文章围绕着如何用Pythonselenium搭建自动化测试环境展开,文中有非常详细的介绍,需要的朋友可以参考下 一、环境搭建 1、安装pythonpycharm软件 。python安装网址官网&#xff1a;About Python™ | Python.org 根据自己的电脑系统选择…

设计模式 ~ 发布订阅模式

概念 用于实现对象之间的松耦合通信&#xff1b; 在该模式中&#xff0c;存在一个或多个发布者&#xff08;Publishers&#xff09;和一个或多个订阅者&#xff08;Subscribers&#xff09;&#xff1b; 发布者负责发布消息&#xff0c;而订阅者负责订阅感兴趣的消息并在接收到…