当前位置: 首页 > 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>

相关文章:

  • 【KWDB 创作者计划】_KWDB能帮我的项目解决什么问题
  • QML学习:使用QML实现抽屉式侧边栏菜单
  • 北京亦庄机器人马拉松:人机共跑背后的技术突破与产业启示
  • DeepSeek-Prover-V2-671B 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
  • Java学习计划与资源推荐(入门到进阶、高阶、实战)
  • 蓝桥杯Python(B)省赛回忆
  • 不同镜头对色彩还原的影响
  • webpack5启动项目报错:process is not defined
  • 【神经网络与深度学习】探索全连接网络如何学习数据的复杂模式,提取高层次特征
  • 游戏引擎学习第250天:# 清理DEBUG GUID
  • AI开发者的Docker实践:汉化(中文),更换镜像源,Dockerfile,部署Python项目
  • ZLG嵌入式笔记 | 移动硬盘和虚拟机的那些事儿
  • 【思考】欧洲大停电分析
  • Java导出带图片的Excel
  • ERP系统为何沦为“电子台账“?
  • TCP和UDP传输层协议
  • 归并排序算法
  • 第六章 流量特征分析-常见攻击事件 tomcat wp
  • Nginx — http、server、location模块下配置相同策略优先级问题
  • react-11使用vscode开发react相关扩展插件(相关的快捷生成)
  • 图忆|上海车展40年:中国人的梦中情车有哪些变化(上)
  • 媒体:酒店、民宿临时毁约涨价,怎么管?
  • 排除燃气爆炸、人为放火可能,辽宁辽阳火灾事故起火原因正在调查
  • 事关广大农民利益,农村集体经济组织法5月1日起施行
  • 原国家有色金属工业局副局长黄春萼逝世,享年86岁
  • 中国海油总裁:低油价短期影响利润,但也催生资产并购机会