3D数据大屏实现过程,使用echarts、Next.js

📜 本文主要内容

  • 数据大屏自适应方案
  • 动效 echarts:
    • 3D 立体柱状图
    • 动态流光折线图
  • 3D 地球(飞线、柱状图)
  • 无限滚动列表

🔍 大屏效果

数据大屏: 点击预览

请添加图片描述

🕹 运行条件

  • next 12.3.4
  • echarts 5.4.3
  • earth-flyline 1.5.4

数据大屏自适应方案

开发前在网上进行相关了解以后,目前主要有 vw vh、rem、scale 这三种方案 👇

方案实现方式优点缺点
vw vh1.按照设计稿尺寸,将 px 按比例计算转换成 vw,vh1.可以动态计算图表高度,字体等,灵活性较高
2.当屏幕比例跟 ui 稿不一致时,不会出现两边留白情况
1.每个图表都需要单独做字体、间距、位移的适配,比较麻烦
scale1.通过 scale 属性,根据屏幕大小,对图表进行整体的等比缩放1.代码量少,适配简单
2.一次处理后不需要在各个图表 中再去单独适配
1.因为是根据 ui 稿等比缩放,当大屏跟 ui 稿的比例不一样时,会出现周边留白情况
2.当缩放比例过大时候,字体会有一点点模糊,就一点点
3.当缩放比例过大时候,事件热区会偏移。
rem + vw vh1.获得 rem 的基准值
2.动态的计算 html 根元素的 font-size
3.图表中通过 vw vh 动态计算字体、间距、位移等 适配
1.布局的自适应代码量少,适配简单1.因为是根据 ui 稿等比缩放,当大屏跟 ui 稿的比例不一样时,会出现周边留白情况
2.图表需要单个做字体、间距、位移的适配
  • 如果想简单,客户能同意留白,选用 scale 即可
  • 如果需要兼容不同比例的大屏,并且想在不同比例中都有比较好的效果,图表占满屏幕,类似于移动端的响应式,可以采用 vw vh 的方案
  • 至于 rem,个人觉得就是 scale 和 vw vh 的综合,最终的效果跟 scale 差不多

总的来说,每个方案都各有取舍,根据不同的使用场景可以采取不同的方案,案例中的dashboard采用的是 scale 方案,不过可以根据需求自定义

📖 代码实现
/*JS部分*///数据大屏自适应函数const handleScreenAuto = () => {const designDraftWidth = 1920;//设计稿的宽度const designDraftHeight = 960;//设计稿的高度//根据屏幕的变化适配的比例const scale = document.documentElement.clientWidth / document.documentElement.clientHeight < designDraftWidth / designDraftHeight ?(document.documentElement.clientWidth / designDraftWidth) :(document.documentElement.clientHeight / designDraftHeight);//缩放比例(document.querySelector('#screen') as any).style.transform = `scale(${scale}) translate(-50%)`;}//React的生命周期 如果你是vue可以放到mountd或created中useEffect(() => {//初始化自适应  ----在刚显示的时候就开始适配一次handleScreenAuto();//绑定自适应函数   ---防止浏览器栏变化后不再适配window.onresize = () => handleScreenAuto();//退出大屏后自适应消失   ---这是react的组件销毁生命周期,如果你是vue则写在deleted中。最好在退出大屏的时候接触自适应return () => window.onresize = null;}, [])
    /*HTML部分*/  <div className="screen-wrapper"><div className="screen" id="screen"></div></div>
    /*CSS部分  --除了设计稿的宽高是根据您自己的设计稿决定以外,其他复制粘贴就完事*/  .screen-root {height: 100%;width: 100%;.screen {display: inline-block;width: 1920px;  //设计稿的宽度height: 960px;  //设计稿的高度transform-origin: 0 0;position: absolute;left: 50%;}}

动效 echarts 动态流光折线图

效果如下

请添加图片描述

使用echarts 构建带流动光效的折线图,实现代码可以参考另一篇文章,写得比较详细。

基于echarts的带流动光效的折线图

动效 echarts 3D柱状图

效果如下

请添加图片描述

使用echarts 构建3D立体柱状图,实现代码可以参考另一篇文章,写得比较详细。

echarts实现3d柱状图)

3D 地球(飞线、柱状图)

效果如下
请添加图片描述

earth-flyline 基于threejs 封装的3D可视化地球组件,开箱即用。

  1. 支持GeoJSON 格式的数据渲染地图

  2. 支持2D平面地图和3D地球渲染

  3. 支持地图区域配色,边界线配色,地球配色,鼠标滚轮放大缩小,区域高亮

  4. 支持飞线、涟漪的颜色配置和增删操作。

  5. 支持鼠标交互事件

使用

npm i earth-flyline

import earthFlyLine from "earth-flyline";
//请先下载geojson格式的地图文件(可去第三方下载) 然后注册地图,也可以在我的项目src/map路径下查找并下载
//也可通过贴图方式实现,具体详情参考文档说明
import geojson from 'xxx/path/world.json'
earthFlyLine.registerMap("world", geojson);
//获取dom节点作为容器 注:该节点请设置宽高
const dom = document.getElementById("container");
const chart = earthFlyLine.init({dom,map: "world",});

参考资料:
scale 方案参考: 数据大屏最简单自适应方案,无需适配rem单位
GlobeStream3D: 基于Threejs封装的3D地球

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

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

相关文章

长文 | RAG的实战指南及探索之路

今天给大家带来一篇知乎孙鹏飞 的关于RAG实战的文章。 作者&#xff1a;孙鹏飞 知乎&#xff1a;https://zhuanlan.zhihu.com/p/6822534961. 背景介绍 RAG&#xff08;Retrieval Augmented Generation&#xff0c;检索增强生成 &#xff09;方法是指结合了基于检索的模型和生…

LeetCode—11. 盛最多水的容器(中等)

题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;…

leetcode 63.不同路径||

1.题目要求: 2.题目代码: class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {//创建dp数组的含义vector<vector<int>> dp;dp.resize(obstacleGrid.size());for(int i 0;i < dp.size();i){dp[i].…

C++:std::deque简介

std::deque 是 C 标准模板库&#xff08;STL&#xff09;中的一个双端队列&#xff08;Double-ended Queue&#xff09;容器。它是一种动态数组&#xff0c;允许快速地在序列的两端插入和删除元素&#xff0c;同时支持随机访问。 特点 双端操作 支持在队列头部和尾部快速插入和…

【Linux】基础IO_文件系统IO_“一切皆文件”_缓冲区

目录 1. 理解"⽂件" 1-1 狭义理解 1-2 ⼴义理解 1-3 ⽂件操作的归类认知 1-4 系统⻆度 访问文件&#xff0c;需要先打开文件&#xff01;那么是由谁打开文件&#xff1f;&#xff1f;&#xff1f; 操作系统要不要把被打开的文件管理起来&#xff1f; 2. 回顾…

nginx防盗链原理与实践

nginx防盗链的原理是基于http请求头中的referer来限制对资源的访问&#xff08;referer是用来告知浏览器该网页时从哪个页面链接来的&#xff09;&#xff0c;从而防止其他网站胃经授权直接链接资源。 nginx防盗链的作用是节省带宽和资源消耗&#xff0c;保护数据安全&#xf…

UG NX二次开发(Python)-UIStyler-选取点

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、设计一个UI界面3、创建长方体的代码4、需要引入的库5、测试验证1、前言 采用Python语言进行UG NX二次开发的资料比较少,我本来不是很认可采用Python进行二次开发的,但是近期有读者咨询…

linux环境中后台运行java程序

在生产环境&#xff0c;我们通常需要让java进程后台运行&#xff0c;并且即使会话关闭&#xff0c;进程也依然存在。 使用的命令&#xff1a; nohup java -jar xxx.jar -> aaa.log 2>&1 & 详细介绍下上面这条命令 &#xff08;1&#xff09;nohup&#xff1a;…

算法笔记:力扣15、三数之和

思路&#xff1a; 实现代码 class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result new ArrayList<>(); Arrays.sort(nums); // 先对数组进行排序 for (int i 0; i < nums.length - 2; i) { /…

java基础语法光速入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理Java的基础语法部分 适合有编程基础的人快点掌握语法使用 没学过一两门语言的话。。还是不建议看了 极致的浓缩没有一点解释 注释 单行注释 // 多行注释 /**/ 数据类型 布尔型:true false 整型:int,lon…

karmada-descheduler

descheduler规则 karmada-descheduler 定期检测所有部署&#xff0c;通常是每2分钟一次&#xff0c;并确定目标调度集群中无法调度的副本数量。它通过调用 karmada-scheduler-estimator 来完成这个过程。如果发现无法调度的副本&#xff0c;它将通过减少 spec.clusters 的配…

LeetCode 力扣 热题 100道(十四)二叉树的中序遍历(C++)

给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 如下为代码&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullpt…

STM32之ADC采集和DMA传输(八)

STM32F407 系列文章 -内部ADC采集和DMA传输&#xff08;八&#xff09; 目录 前言 一、ADC特性 二、DMA特性 三、ADC采集 1.单通道ADC采集 1.头文件定义 2.函数adc_init() 3.函数HAL_ADC_MspInit() 4.函数adc_channel_set() 5.函数adc_get_result() 6.函数adc_get_r…

三菱人机界面GOT SIMPLE 系列 GS2107\GS2110\GS2512

以客户需求为核心的全面升级!GOT SIMPLE系列新功能 GOT SIMPLE升级版重磅更新&#xff0c;增添了许多期待已久的新功能&#xff0c;帮助用户实现远程维护! 扩充用户存储器容量至15MB&#xff0c;并支持轮廓字体&#xff0c;以实现平滑、靓丽的字体显示。此外&#xff0c;可使用…

VLTVG代码复现并讲解

train.py 在main函数中找到这个构建模型的地方&#xff0c;ctrl&#xff0b;左键点进这个函数中去 来到了这里 又来到了这里&#xff0c;这里就是构建模型的地方&#xff1a; 又来到了这里&#xff0c;还是在VLTVG.py这个文件中&#xff1a; Method The Overall Network Visua…

转换思维是为智

转换思维是为智 2023年11月08日(节选) 我们人的思维分为人间思维&#xff0c;圣人思维&#xff0c;菩萨思维。人间思维讲得通俗一点就是世间智慧&#xff0c;他拥有的是人间的智慧&#xff0c;讲得再简单一点&#xff0c;就是人间的聪明。圣人的思维是什么&#xff0c;是一种脱…

qtcanpool 知 10:包管理雏形

文章目录 前言痛点转机雏形实践后语 前言 曾听闻&#xff1a;C/Qt 没有包管理器&#xff0c;开发起来太不方便。这是一个有过 node.js 开发经验的人对 Qt 的吐槽。 确实&#xff0c;像 python、golang、node.js 这些编程语言都有包管理器&#xff0c;给用户带来了极佳的开发体…

光敏传感器实验

用到 ADC 采集&#xff0c;通过 ADC 采集电压&#xff0c;获取光敏传感器的电阻变化&#xff0c;从而得出环境光线的变化&#xff0c;并在 TFTLCD 上面显示出来。 光敏传感器是最常见的传感器之一&#xff0c;它的种类繁多&#xff0c;主要有&#xff1a;光电管、光电倍增管…

Modbus RTU转Profinet接4台流量器配置案例

Modbus RTU转Profinet是工业自动化领域常见的通讯协议。Modbus RTU因其简单、可靠而被广泛应用于各种设备间的数据传输&#xff0c;而Profinet则以其高速、实时性在现代工业4.0场景中扮演着重要角色。本文将详细解析如何将Modbus RTU转换为Profinet&#xff0c;并通过实际案例来…

【AI系统】推理系统架构

推理系统架构 推理系统架构是 AI 领域中的一个关键组成部分&#xff0c;它负责将训练好的模型应用于实际问题&#xff0c;从而实现智能决策和自动化。在构建一个高效的推理系统时&#xff0c;我们不仅需要考虑其性能和准确性&#xff0c;还需要确保系统的可扩展性、灵活性以及…