echarts 关系图节点拖拽

最近做了一个需求,应用关系图,节点可拖拽并保存坐标,本篇记录一下拖拽功能

拖拽代码如下

moveNodes() {

      this.myChart.on("mouseup",(params)=>{

     //更新节点坐标

        staticData.forceData[params.dataIndex].x = params.event.offsetX;

        staticData.forceData[params.dataIndex].y = params.event.offsetY;

    //更新画布

        this.myChart.setOption({

          series: [

            {

              type: "graph",

              data: staticData.forceData

            }

          ]

        });

     //更新图表布局(图表可能会因为拖拽使得节点位置改变而自适应缩放)

        this.myChart.resize();

      })

    }

需要注意的是,需要在节点中加入fixed:true属性和draggable:true属性

保存坐标功能,需要获取节点在画布中的坐标,否则下次渲染会发现节点位置与拖拽位置不一致

//获取节点在画布中的坐标

        let nodeCode=this.myChart._chartsViews[0]._symbolDraw._data._itemLayouts[params.dataIndex];

        staticData.forceData[params.dataIndex].x = nodeCode[0];

        staticData.forceData[params.dataIndex].y = nodeCode[1];

调用接口保存到数据库中,下次调用节点信息,重新渲染图表会发现节点位置没有偏差

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ECharts 关系可以通过设置 `roam` 属性来启用拖动和缩放功能,设置 `focusNodeAdjacency` 属性来启用节点间的联动高亮。此外,ECharts 还提供了 `animation` 动画属性,可以通过设置节点之间的连线数据进行流动效果的展示。 下面是一个简单的示例代码,展示了如何实现拖动和缩放、节点联动高亮以及连线流动效果: ```javascript // 初始化 ECharts 实例 var myChart = echarts.init(document.getElementById('main')); // 设置关系的配置项和数据 var option = { // 启用拖动和缩放功能 roam: true, // 启用节点间的联动高亮 focusNodeAdjacency: true, // 设置关系节点和连线数据 series: [{ type: 'graph', layout: 'force', symbolSize: 50, data: [{ name: '节点1', x: 100, y: 100 }, { name: '节点2', x: 200, y: 200 }], links: [{ source: '节点1', target: '节点2' }], // 设置节点和连线的样式 itemStyle: { color: '#009688' }, lineStyle: { color: '#999' }, // 设置连线的流动效果 emphasis: { lineStyle: { width: 3, curveness: 0.3, color: '#ff0000' } }, animationDuration: 3000, animationEasingUpdate: 'quinticInOut' }] }; // 使用刚指定的配置项和数据显示表 myChart.setOption(option); ``` 上述代码中,通过设置 `roam` 属性启用拖动和缩放功能,设置 `focusNodeAdjacency` 属性启用节点间的联动高亮。通过设置 `emphasis` 属性来控制节点和连线的高亮样式,设置 `animationDuration` 属性来控制连线流动效果的动画时间,设置 `animationEasingUpdate` 属性来控制动画的缓动函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值