当前位置: 首页 > news >正文

electron中显示echarts

🔧 一、基础环境配置
  1. 初始化项目

    npm init -y
    npm install --save-dev electron
    
  2. 安装ECharts

    npm install echarts
    
  3. 引入方式

    • 渲染进程直接调用
      // renderer.js
      const echarts = require('echarts');
      
    • 框架集成方案
      • Vue3:使用vue-echarts v6+
      • React:选用echarts-for-react

🚀 二、核心实现步骤
▎1. 创建图表容器
<div id="chart" style="width: 800px; height: 600px;"></div>
▎2. 初始化与渲染基础图表
const container = document.getElementById('chart');
const myChart = echarts.init(container, null, { devicePixelRatio: 2, // 高清屏适配renderer: 'canvas'   // 默认渲染器,可省略
});// 柱状图示例配置
const option = {tooltip: { trigger: 'axis' },xAxis: { data: ['A', 'B', 'C', 'D', 'E'] },yAxis: { type: 'value' },series: [{ type: 'bar',data: [120, 200, 150, 80, 70],itemStyle: { borderRadius: 5 } // 柱体圆角}]
};
myChart.setOption(option);
▎3. 动态数据更新
// 实时更新数据
setInterval(() => {const newData = Array(5).fill(0).map(() => Math.floor(Math.random() * 200));myChart.setOption({ series: [{ data: newData }] });
}, 1000);

⚠️ 三、高频问题解决方案
问题现象解决方案
echarts is not defined检查渲染进程是否启用nodeIntegration: true,Vue/React需用import * as echarts
图表模糊初始化时配置devicePixelRatio: window.devicePixelRatio
窗口缩放失真监听resize事件并调用myChart.resize()
大数据卡顿启用增量渲染:series: [{ progressive: 1000 }] (ECharts 5.2+)

🎨 四、进阶场景配置
▎1. 主题切换(亮色/暗色)
// 暗色主题示例
myChart.dispose(); // 销毁旧实例
myChart = echarts.init(container, 'dark'); // 应用内置暗色主题
myChart.setOption(option);
▎2. 原生菜单交互图表
// 主进程发送图表类型
ipcMain.on('change-chart', (_, type) => {mainWindow.webContents.send('update-chart', type);
});// 渲染进程接收并更新
ipcRenderer.on('update-chart', (_, type) => {myChart.setOption({ series: [{ type }] }); // 动态切换折线/柱状等
});
▎3. 响应式布局技巧
/* CSS自适应容器 */
#chart { width: 100%; height: 70vh; /* 视口高度占比 */
}

💎 最佳实践总结
  • 架构推荐:Vue3 + vue-echarts组件库 + Electron
  • 调试工具
    • 开启webPreferences: { devTools: true }
    • 使用ECharts Inspector插件检查配置
  • 打包优化
    "build": {"files": ["!node_modules/echarts/src/**"] // 排除源码减小体积
    }
    
http://www.lqws.cn/news/560071.html

相关文章:

  • 微机系统 第八章 模拟接口
  • Windows 合并多个txt到一个txt文件中 (txt文件的合并与拆分)
  • 【Go语言-Day 10】深入指针应用:解锁函数“引用传递”与内存分配的秘密
  • 如何让ChatGPT模仿人类写作,降低AIGC率?
  • 设计模式-代理模式、装饰者模式
  • [Java 基础]LinkedList
  • 告别脚本!用浏览器为 AWS CLI 实现真正的 Cognito 单点登录
  • 基于Spring Boot的网上购物平台设计与实现
  • 【软考--软件设计师】10.2 关系型数据库
  • 网络安全体系结构和安全防护
  • Linux内核网络协议栈深度解析:面向连接的INET套接字实现
  • 【AI实践】Mac一天熟悉AI模型智能体应用(百炼版)
  • 前端React和Vue框架的区别
  • Spring AI Alibaba 入门指南:打造企业级 AI 应用
  • 全面拥抱vue3
  • 编译安装交叉工具链 riscv-gnu-toolchain
  • 鸿蒙 Scroll 组件深度解析:丝滑滚动交互全场景实现
  • uni-app项目实战笔记26--uniapp实现富文本展示
  • 中国农村统计年鉴-Excel版(1985-2024年)
  • 机器学习框架(1)
  • c#激光设备行业ERP软件进销存软件库存管理软件财务管理软件
  • kubernetes部署3节点高可用elasticsearch v8.14.3
  • OpenCV图像噪点消除五大滤波方法
  • Cesium快速入门到精通系列教程十一:Cesium1.74中高性能渲染上万Polyline
  • Java笔记
  • 机器学习配置环境
  • Ultralytics YOLO超参数调整指南(一)
  • 利用ROS打印novatel_msgs/INSPVAX
  • JSON简介及其应用
  • 创客匠人解析:身心灵赛道创始人 IP 打造核心策略