Vue3 +Echarts5 可视化大屏——屏幕适配

news2024/11/26 16:45:19

项目基于Vue3 + Echarts5 开发,屏幕适配是使用 scale 方案
Echarts组件按需引入,减少打包体积
地图组件封装(全国&省份地图按需加载)

效果图:

在这里插入图片描述

屏幕适配

大屏适配常用的方案有 rem + vw/vhscale

  • rem + vw/vh 方案

结合使用rem(相对于根元素字体大小的单位)和vw/vh(视窗宽度/高度的单位)来实现大屏的适配。它的优点是灵活性高、兼容性好、适应性强,但需要进行计算,可能存在误差问题,且代码复杂度较高。

  • scale 方案

通过改变页面根元素的缩放比例来实现大屏适配。它的优点是实现简单,不需要进行计算,且适用范围广,但可能会存在像素失真问题。

此项目使用 scale 缩放这种方式来实现。

利用 CSStransform:scale 属性对页面布局进行自适应缩放,CSS 元素设置完全按照设计稿大小设置 px,不需要转换长度单位。此项目设计稿给的尺寸是 1920*1080。具体方法如下:

  1. 首先根据浏览器大小推断缩放比例

思路:

  • 首先要确定设计稿尺寸,默认是 1920 x 1080
  • 分别计算浏览器和设计图宽高比
  • 如果浏览器的宽高比大于设计稿的宽高比,就取浏览器高度和设计稿高度之比;如果浏览器的宽高比小于设计稿的宽高比,就取浏览器宽度和设计稿宽度之比
// 根据浏览器大小推断缩放比例
// 首先要确定设计稿尺寸,默认是 1920 x 1080
// 分别计算浏览器和设计图宽高比
// 如果浏览器的宽高比大于设计稿的宽高比,就取浏览器高度和设计稿高度之比
// 如果浏览器的宽高比小于设计稿的宽高比,就取浏览器宽度和设计稿宽度之比
const getScale = (width = 1920, height = 1080) => {
  let ww = window.innerWidth / width
  let wh = window.innerHeight / height
  return ww < wh ? ww : wh
}
  1. 初始化的时候直接设置数据大屏的缩放比例,dataScreenRef 为整个大盒子 DOM
onMounted(() => {
  // 初始化时为外层盒子加上缩放属性,防止刷新界面时就已经缩放
  if (dataScreenRef.value) {
    dataScreenRef.value.style.transform = `scale(${getScale()}) translate(-50%, -50%)`
    dataScreenRef.value.style.width = `1920px`
    dataScreenRef.value.style.height = `1080px`
  }
  /**  其他代码 */
  // 为浏览器绑定事件
  window.addEventListener("resize", resize);
})
  1. 监听浏览器的窗口大小变化, 将新的比例赋给 scale 变量
// 监听浏览器 resize 事件
const resize = () => {
  if (dataScreenRef.value) {
    dataScreenRef.value.style.transform = `scale(${getScale()}) translate(-50%, -50%)`
  }
  /**  其他代码 */
}

地图数据下载

数据来源 https://datav.aliyun.com/portal/school/atlas/area_selector,获取各区域的 json 数据。

图表资源推荐

  • isqqw: https://www.isqqw.com/
  • MCChart: http://echarts.zhangmuchen.top/#/index

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

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

相关文章

C++之虚函数和纯虚函数多态调用区别(一百五十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

中值滤波的运用

需求&#xff1a; c#、WPF开发&#xff0c;在界面上画不规则的图形区域&#xff0c;并提取区域内的point 实现方式&#xff1a; 1. 用 InkCanvas控件作为画布&#xff0c;用path画不规则图形 2. 将InkCanvas控件内的内容保存为jpg图片 3. 通过判断区域的颜色&#xff0c;从而得…

离散化模板(附 区间和 解决方法)

目录 用于解决的问题类型&#xff1a; 作用&#xff1a; 使用到的函数&#xff1a; 常用模板&#xff1a; 例题引入&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 代码详解&#xff1a; 用于解决的问题类型&#xff1a; 对于值域比较大&#xff0c;但个数比较少…

python爬虫之playWright解密传参

参考文章&#xff1a; Python和js实现逆向之加密参数破解_js btoa python_biyezuopinvip的博客-CSDN博客 JS逆向——借助playwright实现逆向_lishuangbo0123的博客-CSDN博客 简单方便的 JavaScript 逆向辅助模拟方法_token 自己整理的代码 from playwright.sync_api impor…

数组、指针练习题及解析(含笔试题目讲解)(二)

接上文&#xff0c;我们继续笔试题目讲解。 目录 笔试题3 笔试题4 笔试题5 笔试题6 笔试题7 面试题8 总结 笔试题3 int main() {int a[4] { 1, 2, 3, 4 };int *ptr1 (int *)(&a 1);int *ptr2 (int *)((int)a 1);printf( "%x,%x", ptr1[-1], *ptr2);…

postman 携带时间戳及md5加密预处理

// 获取全局变量 uid postman.getGlobalVariable(“uid”) sid postman.getGlobalVariable(“sid”) //设置当前时间戳 postman.setGlobalVariable(“time”,Math.round(new Date().getTime())); time postman.getGlobalVariable(‘time’) //设置KEY_WORD为全局变量 post…

C# SolidWorks 二次开发 -从零开始创建一个插件(1)

学习内容:从零开始定制一个SolidWorks插件 作为了一个职业的二次开发人员&#xff0c;我曾经创建插件"无数"。但从未像今天这篇文章这样&#xff0c;从空项目开始&#xff0c;之前的文章中我有介绍&#xff0c;要么使用SolidWorks API模板&#xff0c;要么使用了第三…

小马哥JAVA实战营-JDBC

小马哥是一个非常牛逼的技术大牛&#xff0c;最近在看他的课&#xff0c;感兴趣也可以关注一波小马哥&#xff08;不是引流&#xff0c;是真的很推荐&#xff09;&#xff1a; 小马哥B站 JDBC规范文档 jdbc规范文档下载链接 JDBC的主要特征 面向数据表行列编程驱动程序需要…

《3.linux应用编程和网络编程-第8部分-3.8.网络基础》 3.8.1.网络通信概述 3.8.3.网络通信基础知识2

进程间通信&#xff1a; 管道 、 信号量、 共享内存&#xff0c; 技术多&#xff0c;操作麻烦 线程就是解决 进程间 通信 麻烦的事情&#xff0c;这是线程的 优势 3.8.1.网络通信概述 3.8.1.1、从进程间通信说起&#xff1a;网络域套接字socket&#xff0c;网络通信其实就是位…

2023.7月最新版idea安装Jrebel实现热部署,可解决后端启动等待时间过长问题

2023.7最新版idea热部署配置 一 下载jrebel插件二 激活我使用的方法 三 配置方式1 设置自动编译2 设置 compiler.automake.allow.when.app.running3 勾选项目&#xff0c;然后以Rebel方式启动 4 Settings查看Activation情况四 报错解决1 启动失败 2 端口被占用 五 总结 一 下载…

JS 的 new 到底是干什么的?

大部分讲 new 的文章会从面向对象的思路讲起&#xff0c;但是我始终认为&#xff0c;在解释一个事物的时候&#xff0c;不应该引入另一个更复杂的事物。 今天我从「省代码」的角度来讲 new。 --------------------------- 想象我们在制作一个策略类战争游戏&#xff0c;玩家…

网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)

目录 网络编程基本概念 网络通信协议 IP地址 TCP协议和UDP协议 网络编程基本概念 计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其 外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软 件及网络通信协议的…

echarts图表进度条类型图

1、实现效果 左边是类别、数量&#xff0c;中间类似于进度条&#xff0c;右边是所占百分比 2、实现思路 x轴不显示&#xff0c;y轴的axisLabel用富文本&#xff0c;显示机器与台数&#xff1b;图表有两个数据组&#xff0c;分别用蓝色和灰色表示&#xff0c;两个柱子重合&…

Jmeter beanshell编程实例

目录 1、引言 2、需求 3、BeanShell实现 3.1、原始单元测试的java代码&#xff1a; 3.2、调用的RSAUtil原始方法&#xff1a; 3.3、使用BeanShell预处理器实现报文加密&#xff1a; 库导入部分&#xff1a; JSON报文组装&#xff1a; RSA加密&#xff1a; 3.4、取样器…

【C语言】指针进化:传参与函数(2)

莫道君行早&#xff0c;更有早行人。— 出自《增广贤文上集》 解释&#xff1a;别说你出发的早&#xff0c;还有比你更早的人。 这篇博客我们将会深入的理解数组传参和函数指针等指针&#xff0c;是非常重要的内容&#xff0c;学好这部分才能算真正学懂C语言。 目录 一维数组传…

【网络】socket——预备知识 | 套接字 | UDP网络通信

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 在前面本喵对网络的整体轮廓做了一个大概的介绍&#xff0c;比如分层&#xff0c;协议等等内容&#x…

UFS 14 - UFS RPMB安全读写命令

UFS 14 - UFS RPMB安全读写命令 1 SECURITY PROTOCOL IN/OUT Commands1.1 CDB format of SECURITY PROTOCOL IN/OUT commands1.2 Supported security protocols list description1.3 Certificate data description 2 CDB format of SECURITY PROTOCOL IN/OUT commands demo2.1 …

Spring Boot原理分析(一):项目启动流程、自动装配

文章目录 一、项目启动流程二、SpringBootApplication.java源码解析1.准备工作2.源码3.自定义注解4.组合注解5.注解ComponentScan过滤器 6.注解SpringBootConfigurationConfiguration 7.注解EnableAutoConfiguration&#xff08;1&#xff09;Spring手动装配使用XML配置文件使用…

Nerf论文阅读笔记Neuralangelo: High-Fidelity Neural Surface Reconstruction

Neuralangelo&#xff1a;高保真神经表面重建 公众号&#xff1a;AI知识物语&#xff1b;B站暂定&#xff1b;知乎同名 视频入门介绍可以参考 B站——CVPR 2023最新工作&#xff01;Neuralangelo&#xff1a;高保真Nerf表面重建 https://www.bilibili.com/video/BV1Ju411W7…

杨氏矩阵,字符串左旋,字符串旋转结果题目解析

杨氏矩阵 题目要求:有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 示例 分析:我们仔细分析&#xff0c;不难发现&#xff0c;对于杨氏矩阵老说&#xff0c;右上角和左下…