echarts力导向图节点连线动画_使用jsplumb绘制一个链路图

本文介绍了jsplumb库的使用,包括连接节点、自定义样式、添加箭头、限制节点拖动区域等功能,展示了如何创建类似Visio的流程图,并给出了实战项目的链接。
摘要由CSDN通过智能技术生成

项目效果

a81e6876dcdd0ed2476bd2e689508281.gif

现在市场上的绘制图表工具有那些

  • G6 :是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明,简单。让用户获得关系数据的 Insight。
  • graphviz 图形可视化是一种将结构信息表示为抽象图形和网络图的方式。自动图形绘制在软件工程,数据库和Web设计,网络以及许多其他领域的可视界面中具有许多重要的应用程序。

什么是jsplumb,能做什么?

  • jsplumb是一个图表插件,它能绘制一条链条的流程图,类似于Visio的应用程序或工作流程设计器,由于图表项目和连接的所有参数都是非常精细可控的,因此您可以绘制您可以想到的任何类型的图表的。而且它是完全免费的,并根据MIT许可证提供。您可以直接从jsPlumb github网站下载框架。该项目主要由Simon Porritt开发,他在澳大利亚西德尼担任网络开发人员。 jsPlumb由他积极开发。

jsplumb 的简单入门

1.基本概念

  • Souce 源节点

  • Target 目标节点

  • Anchor 锚点

    一个位置,放置端点的地方,相对于一个元素的来源,您不需要自己硬编码来创建它,jsPlumb提供给您各种功能,您只需要按照您的需要创建它就可以了。它没有可视化的显示,只是一个逻辑位置,可以使用锚的id来引用它,jsPlumb支持这样做。

  • Endpoint 端点

链接的一端的可视化表示,您可以创建并可以链接他们;您可以让他们支持拖拽,或者您可以直接使用jsPlumb.connect()在创建链接时直接创建它们。

  • Connector 连接

链接两个元素的线,页面的可视化表示,jsPlumb有三种默认类型:Bezier曲线,直线,和流程图链接器&

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的D3.js导向示例,演示如何添加节点关系连线: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>D3.js导向 - 新增节点关系连线示例</title> <script src="https://d3js.org/d3.v6.min.js"></script> </head> <body> <svg width="800" height="600"></svg> <script> // 定义节点关系数据 var nodes = [ { id: "node1", name: "节点1" }, { id: "node2", name: "节点2" }, { id: "node3", name: "节点3" }, { id: "node4", name: "节点4" } ]; var links = [ { source: "node1", target: "node2" }, { source: "node1", target: "node3" }, { source: "node2", target: "node4" } ]; // 创建导向对象 var simulation = d3.forceSimulation(nodes) .force("link", d3.forceLink(links).id(d => d.id)) .force("charge", d3.forceManyBody()) .force("center", d3.forceCenter(400, 300)); // 创建节点关系连线 var svg = d3.select("svg"); var link = svg.selectAll("line") .data(links) .enter().append("line") .attr("stroke", "#999") .attr("stroke-opacity", 0.6) .attr("stroke-width", d => Math.sqrt(d.value)); var node = svg.selectAll("circle") .data(nodes) .enter().append("circle") .attr("r", 10) .attr("fill", "#ccc") .call(drag(simulation)); var label = svg.selectAll("text") .data(nodes) .enter().append("text") .text(d => d.name) .attr("font-size", "12px") .attr("dx", 15) .attr("dy", 4); // 定义拖拽行为 function drag(simulation) { function dragstarted(event, d) { if (!event.active) simulation.alphaTarget(0.3).restart(); d.fx = d.x; d.fy = d.y; } function dragged(event, d) { d.fx = event.x; d.fy = event.y; } function dragended(event, d) { if (!event.active) simulation.alphaTarget(0); d.fx = null; d.fy = null; } return d3.drag() .on("start", dragstarted) .on("drag", dragged) .on("end", dragended); } // 新增节点关系连线 var newNode = { id: "node5", name: "节点5" }; var newLink = { source: "node4", target: "node5" }; nodes.push(newNode); links.push(newLink); node = node.data(nodes, d => d.id); node.exit().remove(); node = node.enter().append("circle") .attr("r", 10) .attr("fill", "#ccc") .call(drag(simulation)) .merge(node); label = label.data(nodes, d => d.id); label.exit().remove(); label = label.enter().append("text") .text(d => d.name) .attr("font-size", "12px") .attr("dx", 15) .attr("dy", 4) .merge(label); link = link.data(links); link.exit().remove(); link = link.enter().append("line") .attr("stroke", "#999") .attr("stroke-opacity", 0.6) .attr("stroke-width", d => Math.sqrt(d.value)) .merge(link); // 更新导向 simulation.nodes(nodes); simulation.force("link").links(links); simulation.alpha(1).restart(); </script> </body> </html> ``` 在上面的示例中,我们首先定义了一个简单的节点关系数据,并创建了一个导向对象。然后,我们使用D3.js创建了节点关系连线的SVG元素,并绑定了数据。 接下来,我们定义了一个拖拽行为,以便用户可以拖动节点。然后,我们添加一个节点一个新的关系连线,并使用D3.js更新了节点关系连线的SVG元素。 最后,我们更新了导向对象,并重新启动了导向的模拟,以确保新节点关系连线被正确地添加导向中。 请注意,这只是一个简单的示例,实际应用中需要根据具体需求进行更复杂的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值