echarts图表联动

发布时间:2026-03-26 21:38

插件版本

"vue": "^2.6.11", "vue-echarts": "^5.0.0-beta.0",

vue组件

mounted() { this.initChart1() this.initChart2() // 调用图表联动初始化方法 initChartLinkage.call(this) }, beforeDestroy() { clearLinkEvent.call(this) },

实现代码

// 初始化图表联动功能 export function initChartLinkage() { const self = this // 等待图表渲染完成 this.$nextTick(() => { const chart1 = this.$refs.chart1 && this.$refs.chart1.chart const chart2 = this.$refs.chart2 && this.$refs.chart2.chart if (!chart1 || !chart2) return // 为chart1添加鼠标事件监听 chart1.getZr().on('mousemove', function(event) { let myIdx = self.getDataIdx(chart1, event); let myText = self.xData[myIdx]; let otherIdx = self.toggleXAxis(self.chart2Option, myText); chart2.dispatchAction({ type: 'showTip', seriesIndex: self.seriesIdx.serIdx2, dataIndex: otherIdx }) }) chart2.getZr().on('mousemove', function(event) { let myIdx = self.getDataIdx(chart2, event); let myText = self.xData[myIdx] let otherIdx = self.toggleXAxis(self.chart1Option, myText); chart1.dispatchAction({ type: 'showTip', seriesIndex: self.seriesIdx.serIdx1, dataIndex: otherIdx }) }) // 当鼠标离开图表时,隐藏两个图表的tooltip chart1.getZr().on('mouseout', () => { chart2.dispatchAction({ type: 'hideTip' }) }) chart2.getZr().on('mouseout', () => { chart1.dispatchAction({ type: 'hideTip' }) }) // 存储图表实例引用,以便在组件销毁时移除事件监听 this.linkedCharts = [chart1.getZr(), chart2.getZr()] // 监听dataZoom联动 function bindDataZoomSync(chartA, chartB) { chartA.on('datazoom', function(params) { // 防止事件循环触发 if (this.isUpdating) return const dataZoom = params.batch ? params.batch[0] : params const start = dataZoom.start const end = dataZoom.end // 更新图表B chartB.setOption({ dataZoom: [{ start: start, end: end }] }, false, false) // 不触发事件 // 标记图表B正在更新 chartB.isUpdating = true setTimeout(() => { chartB.isUpdating = false }, 10) }) // 双向绑定 chartB.on('datazoom', function(params) { if (this.isUpdating) return const dataZoom = params.batch ? params.batch[0] : params const start = dataZoom.start const end = dataZoom.end chartA.setOption({ dataZoom: [{ start: start, end: end }] }, false, false) chartA.isUpdating = true setTimeout(() => { chartA.isUpdating = false }, 10) }) } // 调用联动函数 bindDataZoomSync(chart1, chart2) }) } // 清理图表事件监听 export function clearLinkEvent() { if (this.linkedCharts && this.linkedCharts.length) { const [chart1, chart2] = this.linkedCharts if (chart1) { chart1.off('mouseover') chart1.off('mouseout') } if (chart2) { chart2.off('mouseover') chart2.off('mouseout') } this.linkedCharts = null } }

标签:

网址:echarts图表联动 https://mxgxt.com/news/view/2063357

相关内容

如何使用Echarts实现多图联动?
ECharts的多图表联动当需要展示的数据比较多时,放在一个图表进行展示的效果并不佳,此时,可以考虑使用两个图表进行联动
揭秘ECharts与百度:图表可视化技术巅峰对决
揭秘ECharts:为什么它是图表界当之无愧的明星工具?
ECharts实现雷达图详解ECharts 是一款由百度开源的数据可视化工具,它提供了丰富的图表类型,如折线图、柱状图、
Echarts+Vue 实现知识图谱
揭秘ECharts柱图宽度设置技巧,轻松提升图表视觉效果
揭秘ECharts:图表界的明星,如何轻松驾驭复杂数据可视化?
掌握ECharts柱图宽度设置:轻松打造个性化图表视觉效果
解锁echarts饼图新玩法:白色背景图片如何巧用,让你的图表瞬间提升视觉效果

随便看看