You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECharts设置cartesian2d后拖拽节点缩放复位问题及draggable版本咨询

问题解答

一、拖拽节点后缩放回到初始位置的原因及解决方案

原因

当graph系列配置coordinateSystem: 'cartesian2d'时,节点的位置完全由data数组中每个项的value(即[x,y]坐标)决定。拖拽节点时,ECharts仅临时修改了节点的视觉显示位置,但并未同步更新option.series[0].data中对应的value值。触发dataZoom缩放操作时,ECharts会重新基于原始的value计算节点在缩放后坐标系中的位置,导致节点回到初始坐标。

解决方案

监听graph的dragend事件,在拖拽结束后将节点的当前坐标同步更新到option的data数组中,确保后续dataZoom操作使用最新的位置数据。

修改后的代码示例:

var dom = document.getElementById('chart-container');
var myChart = echarts.init(dom, null, {
  renderer: 'canvas',
  useDirtyRect: false
});

var app = {};
var option;

option = {
  title: {
    text: 'Basic Graph'
  },
  tooltip: {},
  xAxis: {
    min: 0,
    max: 400,
    type: 'value',
    axisLine: { onZero: false },
    show: true
  },
  yAxis: {
    min: 0,
    max: 200,
    type: 'value',
    axisLine: { onZero: false },
    show: true
  },
  dataZoom: [{
    type: 'inside',
    xAxisIndex: [0],
    filterMode: 'empty'
  }, {
    type: 'inside',
    yAxisIndex: [0],
    filterMode: 'empty'
  }],
  series: [{
    type: 'graph',
    coordinateSystem: 'cartesian2d',
    layout: 'none',
    symbolSize: 50,
    label: {
      show: true
    },
    edgeSymbol: ['circle', 'arrow'],
    edgeSymbolSize: [4, 10],
    data: [{
      name: 'A',
      symbol: 'rect',
      symbolSize: [50, 30],
      value: [100, 100]
    }, {
      name: 'B',
      symbol: 'circle',
      symbolSize: 40,
      value: [300, 100]
    }],
    links: [{
      source: 'A',
      target: 'B'
    }],
    lineStyle: {
      opacity: 0.9,
      width: 2,
      curveness: 0
    },
    draggable: true
  }]
};

if (option && typeof option === 'object') {
  myChart.setOption(option);
}

// 监听拖拽结束事件,同步更新节点坐标
myChart.on('graphnode_dragend', function(params) {
  // 将像素坐标转换为笛卡尔坐标系的数值坐标
  var newCoord = myChart.convertFromPixel({seriesIndex: 0}, params.event.offset);
  // 更新option中对应节点的value值
  option.series[0].data.forEach(item => {
    if (item.name === params.data.name) {
      item.value = newCoord;
    }
  });
  // 重新设置option,确保数据同步
  myChart.setOption(option);
});

window.addEventListener('resize', myChart.resize);

二、draggable属性的生效版本

draggable属性在ECharts 3.0.0版本开始正式引入并支持。在graph系列中,无论是默认坐标系还是cartesian2d坐标系,该属性从3.0.0版本起即可控制节点是否可拖拽,后续3.x、4.x、5.x版本均对其进行了兼容性和功能优化。


内容的提问来源于stack exchange,提问作者miniWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:23:13