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

echarts

在使用echarts中,当返回的(series)多条数据时, echarts渲染的是一个图表多条折现,还是(series)中每个数据单独展示成独立图表

在(series)每条数据单独展示时,echarts的鼠标移入tooltip是同时显示,还是移入当前的只显示当前echarts的tooltip

echarts: 5.5.0

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>多图联动</title><script src="./js/echarts.min.js"></script>
</head>
<body>
<div><button onclick="onInitEcharts(1)">单图</button><button onclick="onInitEcharts(2)">多图</button><button onclick="onTab(1)">统一滑动</button><button onclick="onTab(2)">单独滑动</button>
</div>
<div id="app"></div>
</body><script>let displayType = 1  // 单图   2 多图let axisPointer = 1  // 1 统一 2 单独// 基本数据结构let optionlLineData = {tooltip: {trigger: 'axis'},legend: {},grid: {top: 8,left: 10,right: 10,bottom: 60,containLabel: true},xAxis: [{type: 'category',data: []}],yAxis: [{type: 'value'}],series: [{name: 'Email',type: 'line',data: []},{name: 'Union Ads',type: 'line',data: []}]}// 返回数据let option = {xAxis: [{type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]}],tooltip: {trigger: 'axis',},color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'],legend: {},yAxis: [{axisLabel: {formatter: " {value} "},type: "value"}],series: [{data: [820, 932, 901, 934, 1290, 1330, 1320],type: "line"},{data: [720, 832, 801, 834, 1190, 1230, 1220],type: "line"}, {data: [620, 732, 701, 734, 1090, 1130, 1120],type: "line"}, {data: [520, 632, 601, 634, 990, 1030, 1020],type: "line"}]}// 其他颜色值let colors = []let optionLine = nulllet chartArray = []let myChartList = []let fixedClass = 'chart_connect'// 单图还是多图切换function onInitEcharts(type) {displayType = typeconsole.log(chartArray);let app = document.getElementById('app')chartArray.forEach((item, index) => {let elDom = document.getElementsByClassName(fixedClass + index)[0]app.removeChild(elDom)})chartArray = []this.load()}// tooltip 解绑与绑定function onTab(type) {axisPointer = typethis.getEcharts()// if (axisPointer === 1) {//     bindAction(myChartList)// } else {//     disOffConnect(myChartList)// }}load()// 初始加载function load() {let titleList = [{targetName: 'echartsTitle',unitName: '',queryTime: ''},{targetName: 'echartsTitle',unitName: '',queryTime: ''},{targetName: 'echartsTitle',unitName: '',queryTime: ''},{targetName: 'echartsTitle',unitName: '',queryTime: ''}]optionLine = createLineData(option, optionlLineData, titleList)console.log(' this.optionLine', optionLine);let app = document.getElementById('app')// 单独展示if (displayType === 1) {chartArray = initEcharts(optionLine, [], titleList)console.log(chartArray);chartArray.forEach((item, index) => {let div = document.createElement('div')div.className = fixedClass + indexdiv.style.width = '100%'div.style.height = '300px'app.appendChild(div)})setTimeout(() => {if (chartArray.length) {getEcharts()}}, 500)} else {chartArray = [optionLine]console.log(chartArray);let div = document.createElement('div')div.className = fixedClass + 0div.style.width = '100%'div.style.height = '300px'app.appendChild(div)if (chartArray.length) {getEcharts()}}}function initEcharts(chartEcharts, gridTable, titleList) {if (Object.keys(chartEcharts).length) {const chartArray = chartEcharts.series.map((item, index) => {let queryTime = titleList[index].queryTimelet unitName = titleList[index].unitNamereturn {...chartEcharts,tooltip: {trigger: 'axis',// axisPointer: {//     type: 'shadow'// },// formatter: (params) => this.tooltipFormatter(params, queryTime, unitName),// position: function (pos, params, dom, rect, size) {//     const yPos = '20%'//     let xPos = 0//     if (pos[0] < size.viewSize[0] / 2) {//         xPos = pos[0] + 10//     } else {//         xPos = pos[0] - dom.offsetWidth - 10//     }//     return [xPos, yPos]// }},series: [Object.assign(item,{symbolSize: 0,lineStyle: {normal: {width: 3}},sampling: 'lttb'})],index: index,// table: gridTable && gridTable[index] || [],titleList: titleList[index]}})return chartArray // 所有的echarts数据}}function createLineData(data, optionlLineData, titleList) {let optionChartLine = dataconsole.log('chartData----', optionChartLine)if (optionChartLine && Object.keys(optionChartLine).length) {let colorList = optionChartLine.colorif (colors && colors.length) {colorList = colors.concat(optionChartLine && optionChartLine.color)}optionChartLine.backgroundColor = '#f4f4f4'optionChartLine.color = colorList// 边距optionChartLine.grid = optionlLineData.gridoptionChartLine.grid.top = 40optionChartLine.grid.right = 25optionChartLine.grid.bottom = 10optionChartLine.dataZoom = {show: false}optionChartLine.tooltip.trigger = 'axis'// 工具栏optionChartLine.toolbox = {show: true,right: 10,feature: {// dataZoom: {//   yAxisIndex: 'none'// },// dataView: { readOnly: false },magicType: {type: ['line', 'bar']},// restore: {},saveAsImage: {}}}// y轴optionChartLine.yAxis.forEach((y, index) => {y.splitLine = { // 坐标轴区域分割线show: true,lineStyle: {color: '#c6d4e1',width: 1,type: 'dotted'}}})// x轴optionChartLine.xAxis.forEach((x, index) => {x.splitLine = { // 坐标轴区域分割线show: true,lineStyle: {color: '#c6d4e1',width: 1,type: 'dotted'}}x.axisLabel = {interval: 'auto'// interval: x.data.length > 24 ? Math.ceil(Number(x.data.length / 24)) : 0}// x.aa = Number(x.data.length / 24)// x.bb = Math.ceil((x.data.length / 24))// x.data = x.data.sort()})let legendData = []optionChartLine.series.forEach((s, index) => {let colorIndex = this.styleVal === '1' ? index : 0// let seriesName = s.name.split('||')// legendData.push(seriesName[0])// s.name = seriesName[0]// 填充颜色// s.areaStyle = {//   color: {//线性渐变前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord 为 `true`,则该四个值是绝对的像素位置//     type: 'linear',//     x: 0,//     y: 1,//     x2: 0,//     y2: 0,//     colorStops: [{//       // offset: 0, color: colorRgba[index] // 0% 处的颜色//       // offset: 0, color: this.colorRgbaTransparency(colorList, '0')[colorIndex] // 0% 处的颜色//     },//       {//         // offset: 0.5, color: this.colorRgbaTransparency(colorList, '0.3')[colorIndex] // 100% 处的颜色//       },//       {//         // offset: 1, color: colorRgba[index] // 100% 处的颜色//         // offset: 1, color: 'transparent'// 100% 处的颜色//       }//     ],//     // globalCoord: false// 缺省为 false//     // shadowColor: this.colorRgbaTransparency(colorList, '0')[index],//     // shadowBlur: 10//   }// }// if (s.data.length) {//     let seriesData = s.data.map(v => {//         if (typeof v === 'number' && v === 0) {//             v = 0//         } else if (!v || (v && v === '-666666666' || v === -666666666)) {//             v = '-'//         }//         return v != '-' ? (v).toFixed(2) : '-'//     })//     s.data = seriesData// }s['dataIndex'] = index})// 图例组件optionChartLine.legend.top = 5// optionChartLine.legend.right = 150optionChartLine.legend.left = 10optionChartLine.legend.width = '80%'// optionChartLine.legend.data = legendDataconsole.log('optionChartLine', optionChartLine)return optionChartLine}}function bodyResize() {if (myChartList.length) {myChartList.forEach(item => {item.resize()})}}function getEcharts(flag) {bodyResize()chartArray.forEach((item, index) => {let elDom = document.getElementsByClassName(fixedClass + index)[0]console.log(elDom);let dom = echarts.init(elDom)dom.clear()dom.group = fixedClass + 'Echarts'dom.setOption(item, true)myChartList.push(dom)console.log(myChartList);// this.$set(myChartList, index, dom)})if (axisPointer === 1) {console.log('多表联动')// echarts.connect(this.myChartList) // 进行图表多表联动bindAction(myChartList)} else {disOffConnect(myChartList)// echarts.disConnect('chart_connectEcharts') // 解除图表多表联动}}function bindAction(chartList) {echarts.util.each(chartList, function (fromChart) {echarts.util.each(chartList, function (toChart) {if (fromChart === toChart) {return}// tooltip 联动fromChart.on('updateAxisPointer', function (params) {toChart.dispatchAction(toChart.makeActionFromEvent(params),true)})})})}function disOffConnect(chartList) {echarts.util.each(chartList, function (fromChart) {echarts.util.each(chartList, function (toChart) {if (fromChart === toChart) {return}// tooltip 解除联动fromChart.off('updateAxisPointer')})})}
</script>
</html>
http://www.xdnf.cn/news/234793.html

相关文章:

  • Python-pandas-操作csv文件(读取数据/写入数据)及csv语法详细分享
  • MiWi|Microchip开发的专有无线通信协议,适用于低功耗、短距离的无线个人局域网【无线通信小百科】
  • 简单表管理
  • SV 仿真的常识
  • 从有线到无线:冶炼工厂的高效转型
  • C盘哪些文件删除之后无影响,可以清理磁盘空间。
  • Web应用开发指南
  • PostgreSQL中的SSL(2)
  • Missashe考研日记-day31
  • UNet 改进(21):可变形卷积UNet架构
  • Java 实现 SM4 加密解密
  • SpringAI实现AI应用-搭建知识库
  • GPU集群搭建
  • BOTA新六维力传感器PixONE:用12维度力矩与运动感测,驱动人形机器人力控未来
  • Compose笔记(二十)--TextField
  • (31)VTK C++开发示例 ---绘制立方体
  • 第 12 届蓝桥杯 C++ 青少组中 / 高级组省赛 2021 年 4 月 24 日真题
  • C++好用的打印日志类
  • 2025.4.24 JavaScript 基础学习笔记
  • [特殊字符] 蓝桥杯省赛全解析:含金量、获奖难度、参赛意义与发展价值全面剖析
  • 精华贴分享|【零敲碎打12】类筹码数据构建-散户行为倾向
  • react初学踏坑记录-if(number)到底过滤了什么
  • leetcode0075. 颜色分类-medium
  • 数学:拉马努金如何想出计算圆周率的公式?
  • 大连理工大学选修课——机器学习笔记(3):KNN原理及应用
  • 【中间件】bthread效率为什么高?
  • 12.Three.js 中的 DirectionalLight(平行光)详解指南
  • Python第四周作业
  • 软件系统验收报告:功能、性能稳定性如何?数据导出卡顿咋回事?
  • SpringBoot使用Mybatis-Plus分页无效