chart 完成拓扑图单节点拖拽不影响其他节点位置

2024-06-24 13:08

本文主要是介绍chart 完成拓扑图单节点拖拽不影响其他节点位置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述就是做这种的功能,箭头原本是可以动态重复移动的,但不知道哪里问题导致没箭头了,然后补了个edgeSymbol: ['','arrow'], 字段,才增加了箭头。

拖拽某个节点,只有关联到的线条会跟着变动其他的节点位置不变。
参考
https://gallery.echartsjs.com/editor.html?c=x8Fgri22P9
https://echarts.baidu.com/examples/editor.html?c=line-draggable&qq-pf-to=pcqq.group
这两篇文章结合,然后再自己调试出来的。

如果需要在画布上画区域的话,建议用markArea不要用markline。这样一个域可以省两个坐标点绘制,而且域也不会像markline那样因为坐标超出画布就不显示连接的线了。

我这是在用vue项目调试的,所以demo是一个vue文件,echat版本应该是4.2的,不过只要版本不是太低应该都没啥问题

贴下主要的代码:

var option = {title: {text: '网络拓扑图'},backgroundColor: "#F5F5F5",xAxis: {min: 0,max: 12,show: false,type: 'value'},yAxis: {min: 0,max: 12,show: false,type: 'value'},series: [{type: 'graph',layout: 'none',id:'a',// coordinateSystem: 'cartesian2d',coordinateSystem: 'cartesian2d',edgeSymbol: ['','arrow'],// symbolSize: 20,
//                force: {
//                  repulsion: 1000,
//                  edgeLength: [150, 200],
//                  layoutAnimation: false
//                },label: {normal: {show: true,position: 'bottom',color: '#12b5d0'}},lineStyle: {normal: {width: 2,shadowColor: 'none'}},xAxis: {min: 0,max: 12,show: false,type: 'value'},yAxis: {min: 0,max: 12,show: false,type: 'value'},// edgeSymbolSize: 8,draggable:true,data: charts.nodes,links: charts.links,itemStyle: {normal: {label: {show: true,formatter: function(item) {return item.data.name}}}}}, {name: 'A',type: 'lines',coordinateSystem: 'cartesian2d',edgeSymbol: ['circle', 'arrow'],effect: {show: true,trailLength: 0,// constantSpeed: 30,symbol: 'arrow',// color: '#12b5d0',color:'#FF0000',symbolSize: 22},data: charts.linesData}]};myChart.setOption(option);// setTimeout(function () {// Add shadow circles (which is not visible) to enable drag.myChart.setOption({graphic: echarts.util.map(charts.nodes, function (item, dataIndex) {return {type: 'circle',position: myChart.convertToPixel('grid', item.value),shape: {cx: 5,cy: 5,r: 20},invisible: true,draggable: true,ondrag: echarts.util.curry(onPointDragging, dataIndex),onmousemove: echarts.util.curry(showTooltip, dataIndex),onmouseout: echarts.util.curry(hideTooltip, dataIndex),z: 100};})});function onPointDragging(dataIndex, dx, dy) {var tempV = myChart.convertFromPixel('grid', this.position);charts.nodes[dataIndex].value = [tempV[0],tempV[1]];// Update datamyChart.setOption({series: [{id: 'a',data: charts.nodes}]});}function showTooltip(dataIndex) {myChart.dispatchAction({type: 'showTip',seriesIndex: 0,dataIndex: dataIndex});}function hideTooltip(dataIndex) {myChart.dispatchAction({type: 'hideTip'});}// }, 50);window.addEventListener('resize',function(){myChart.resize();myChart.setOption({series: [{id: 'a',data: charts.nodes}]});
});

还有的节点以及连线的代码参考第一篇文章,我这边的节点图片需要更换下自己项目中对应的图片地址,最好是在src外面层的其他目录下,比如外建一个static目录存放图片

最后附上demo文件下载地址:(原本是想把下载积分改为1最低的,但是现在上传资源时没得设置了,默认为5积分)
https://download.csdn.net/download/u012138137/11136186
这个是后续做了点优化卡顿的问题,增加异常设备闪动的效果(demo中的图片路径需要自己更换成本地的图标)。
https://download.csdn.net/download/u012138137/11191900

这篇关于chart 完成拓扑图单节点拖拽不影响其他节点位置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090237

相关文章

ScrollView 往上滑动,里面的一个View停在某个位置的思路

1.scrollView的contentoffset 为view的左上角,减去此时scrollView的左上角 2.而且还不需要让那个红色的view removeFromSuperView ,直接self.view AddSubView 就会自动从原来的那个View脱离开来 3.以后遇到问题的思路。当发现UIView很许多奇特的效果的时候,思考它是不是在不断的改变父控件。 #pragma m

(13)DroneCAN 适配器节点(一)

文章目录 前言 1 特点 2 固件  3 ArduPilot固件DroneCAN设置 4 DroneCAN适配器节点 前言 这些节点允许现有的 ArduPilot 支持的外围设备作为 DroneCAN 或 MSP 设备适应 CAN 总线。这也允许扩展自动驾驶仪硬件的功能。如允许 I2C 设备(如罗盘或空速)距离自动驾驶仪 1m 以上,并实现多达 32 个伺服输出通道。

算法7— 判断一个单链表是否有环,如果有,找出环的起始位置

第一种方法是从单链表head开始,每遍历一个,就把那个node放在hashset里,走到下一个的时候,把该node放在hashset里查找,如果有相同的,就表示有环,如果走到单链表最后一个node,在hashset里都没有重复的node,就表示没有环。 这种方法需要O(n)的空间和时间。 第二种方法是设置两个指针指向单链表的head, 然后开始遍历,第一个指针走一步,第二个指针走两步,如果没

拖拽劫持与数据窃取

2010 年,ClickJacking 技术有了新的发展。一位名叫 Paul Stone 的安全研究者在 BlackHat 2010 大会上发表了题为“Next Generation Clickjacking”的演讲。在该演讲中,提出了“浏览器 拖拽事件”导致的一些安全问题。 目前很多浏览器都开始支持 Drag & Drop 的 API。对于用户来说,拖拽使他们的操作更加 简单。浏览器中的拖拽对

leetcode刷题(36)——24.两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3 题解: 这个题目有2种解法,一个是比较容易想到的循环求解,另外一个是比较难想到的递归求解 解法1:循环求解 关键点在于设置一个pre节点指向链表的头节点,很多链表题目的技巧都是这样设置一个pre

玩转Web之easyui(二)-----easy ui 异步加载生成树节点(Tree),点击树生成tab(选项卡)

关于easy ui 异步加载生成树及点击树生成选项卡,这里直接给出代码,重点部分代码中均有注释 前台: $('#tree').tree({ url: '../servlet/School_Tree?id=-1', //向后台传送id,获取根节点lines:true,onBeforeExpand:function(node,param){ $('#tree').tree('options'

多路h265监控录放开发-(12)完成全部开始录制和全部停止录制代码

xviewer.h 新增 public:void StartRecord();//126 开始全部摄像头录制void StopRecord();//126 停止全部摄像头录制 xviewer.cpp 新增//视频录制static vector<XCameraRecord*> records;//126void XViewer::StartRecord() //开始全部摄像头录

赶论文不用愁:如何利用ChatGPT在3小时内完成论文

在这份指南里,我将详细介绍如何运用ChatGPT 4.0的高级功能来辅助学术研究与文章写作。从挖掘研究课题的初步想法开始,到撰写一篇内容深刻、结构完整的学术论文,我将逐步演示如何在研究的各个阶段中充分利用ChatGPT。值得一提的是,所有这些功能都基于其PLUS版本,如果你尚未订阅,可以参考相关的教程。 初步探索与主题的确定 起初,我置身于知识的大海中,寻找一个值得深入研究的专题。Chat

带你学习Mybatis之mybatis的sql节点

mybatis的sql节点 mybatis的mapper映射文件中的sql节点在初始化时会被解析成MappedStatement对象,其中sql语句会被解析为SqlSource对象,sql语句中定义的动态sql节点、文本节点等则由SqlNode接口的相应实现类表示 SqlSource public interface SqlSource {  BoundSql getBoundSql(Objec

达梦8 通过SF_INJECT_HINT解决新排序机制下失控语句影响其他SQL执行的问题

达梦数据库有两种排序机制。当SORT_FLAG设置0时,采用旧排序机制;当SORT_FLAG=1时,采用新排序机制。详见《达梦新老排序机制的对比》 两种排序机制各有优缺点。 新排序机制引入了全局排序区概念,虽然避免了内存溢出导致系统OOM,但却引入了另外一个问题:个别编写不好的语句可能会占满整个排序区,导致后续所有正常语句无法执行。 例如insert into a1 select a.a f