用HTML+CSS+JS如何 动态绘制 网络拓扑图?

html-css0433

用HTML+CSS+JS如何 动态绘制 网络拓扑图?,第1张

1.各个应用系统、服务器信息及系统直接的调用都录入到数据库中

2.前端拓扑图、或系统调用关系图的展示UI可以通过一些选项从数据库中捞出数据,然后在UI上动态绘制出关系图来

3.如HTML5 Canvas或基于HTML5 Canvas的JTopo、SVG都可以很好的绘制出这种图来。

jsPlumb的配置项有很多,如果不主动设置,jsPlumb就使用默认配置。 建议不要修改默认的配置,而是使用自定义的方式。 1 . 锚位置: jsPlumb有九个默认锚点位置,可用于指定连接器连接到元素的位置:分别是元素的四个角,元素的中心以及元素每个边的中点: 2、基于数组的语法[x,y,dx,dy]除了提供锚点的位置和方向外,还可以选择提供另外两个参数来定义与给定位置的像素偏移量。这是上面指定的锚点,但在y轴正方向有50像素偏移: 3、动态锚 连线时锚点根据位置自动调整到定义的数组里几个点中最合适的位置 创建动态锚点没有特殊的语法,只需提供一系列单独的静态锚点,例如: 或者混合使用 4、多边形锚 不理解多边形锚,可以参考 jsplumb 中的demo/perimeterAnchors,拖动节点试一下效果 jsPlumb支持六种形状: 如果节点的宽高一样,该锚点位置为动态圆周,宽高不同为椭圆。 默认情况下,锚点个数为60,可以手动指定: (2) 组合锚点(三角形与菱形): (3) 自定义角度多边形锚点 上面定义了两个三角形旋转不同角度得到的组合图形。旋转适用带角度的多边形,该值必须以角度为单位,而不是弧度,并且数字可以是正数或负数5、CSS类和锚点 锚点的不同位置可以有多种css样式,那就要有不同的css类提供支持。 (1) 被写入到锚点的CSS类和元素以jsPlumb实例的endpointAnchorClass为前缀,默认为: jsPlumb将会分配这个类给创建的 endpoint 和元素 someDiv: (2) 动态锚的示例: 这里,分配给Endpoint和Element的类将在锚位置更改时循环显示这些值: 注意,如果提供的类名由多个术语组成,则jsPlumb不会在该类中的每个术语前添加前缀: 将导致将2个类添加到端点和元素: (3) 更改锚类前缀 与锚类一起使用的前缀为jsPlumb的endpointAnchorClass。可以在jsPlumb的某个实例上将其更改为喜欢的任何内容: 或者 jsPlumb提供了四种连接线: 在两个端点之间画一条直线。 支持两个参数:stub :可选,默认为0px。此参数的任何正值将导致在与连接线的两端产生一段不可改变方向的线段gap :可选,默认为0px。在连接线的一端和连接的元素之间指定一个间隙。 贝塞尔提供了一个立方的贝塞尔曲线。 支持一个参数:curviness :可选,默认为150px。 定义了曲线的弯曲程度。 垂直或水平的连接线,支持四个参数:stub :可选,最小长度,以像素为单位,最初的存根,源自一个端点。可以是整数,指定了连接器的每个末端的存根,或是一个整数数组,指定[源, 目标]端点的连接。默认值为30像素的整数alwaysRespectStubs :可选,默认为false,此参数表示jsPlumb始终从每个端点绘制指定存根长度,而不是比较两个元素的存根gap :可选,默认为0像素。在连接线的一端和连接的元素之间指定一个间隙。midpoint :可选,默认为0.5。两个元素之间的距离。cornerRadius :默认为0。此参数的正值将改变弯角的度数。 略微弯曲的线(实际上是二次Bezier曲线),类似于状态机的连接器,支持三个参数:margin :可选,默认为5。定义连接线开始/结束的元素的距离。curviness :可选的,默认为10,定义了曲线的弯曲程度。proximityLimit :可选,默认为80。 连接线的两端之间的最小距离,它描绘为一条直线而非二次贝塞尔曲线。 端点是连接里的一个端点外观和行为表现的集合,jsPlumb实现了四个端点: 端点以多种不同方式创建: (1) 调用jsPlumb.connect(..)并传递元素id或DOM元素作为源/目标,创建并分配新的端点 (2) 调用jsPlumb.addEndpoint(...)创建新的端点 (3) 使用jsPlumb.makeSource(...)并随后从该元素拖动连接时,将创建并分配新的端点 在屏幕上绘制一个点,支持三个参数:radius :可选,默认为10像素。 定义点的半径cssClass :可选,端点元素的CSS类hoverClass : 可选,元素或连线的hover属性样式类 绘制一个矩形。 支持构造函数参数有:width :可选,默认为20像素。定义矩形的宽度height :可选,默认为20像素。定义矩形的高cssClass :可选,端点元素的CSS类hoverClass :可选,元素或连线的hover属性样式类 从一个指定的URL加载图像,支持三个参数:src :图片的urlcssClass :可选,端点元素的CSS类hoverClass :可选,元素或连线的hover属性样式类 jsPlumb有五个类型的覆盖: 位置表明连接元素在连接线的位置,通常有三种表明方式: 对于端点,适用相同的原则,将位置指定为[x,y]数组 (1) 指定一个覆盖在端点的中心位置: location:[ 0.5, 0.5 ] (2) 从左上角沿x轴叠加5像素 location: [ 5, 0 ] (3) 从右下角沿x轴叠加5像素 location: [ -5, 0 ] 对于位置的操作,jsPlumb提供了两个方法: (1) jsPlumb.connect调用时 使用箭头的默认选项和带有文本“foo”的标签创建一个箭头 这个连接将有一个位于中间的箭头,位于四分之一的标签“foo”。注意id参数,如果希望删除覆盖层或更改其可见性,可以在以后使用它 (2) jsPlumb.addEndpoint调用时 注:在addEndpoint 使用 connectorOverlays 代替 overlays,因为 overlays指向端点覆盖。 此连接将有一个位于连接头部的10x30箭头,标签“foo”位于中间点。端点本身也有一个覆盖,相对于端点的左上角位于[-0.5 *宽度,-0.5 *高度] (3) jsPlumb.makeSource调用 同样使用 connectorOverlays,而且 makeSource 支持 endpoint 参数。 此连接将有10x30像素箭坐落在连接头,标签“foo”位于中点。注: jsPlumb.makeTarget调用时不能添加覆盖层(4) addOverlay调用 端点和连接都有一个addOverlay方法,它将一个Overlay定义作为参数 (1) Arrow(箭头) 绘制一个箭头,使用四个点:头部和两个尾点,以及一个foldback允许箭头尾部缩进的点。此Overlay的可用构造函数参数: (2) PlainArrow Arrow的foldback为1 的特殊实例,意味着箭头的尾部是扁平。Arrow的所有构造函数参数都适用于PlainArrow (3) 钻石 Arrow的foldback为2,意味着箭头变成钻石。Arrow的所有构造函数参数都适用于Diamond。 (4) 标签 提供用于装饰连接器的文本标签。可用的构造函数参数是: 标签覆盖提供了两个方法 getLabel 和 setLabel 用于动态地get/set标签内容: 标签被赋予一个id ‘label’,然后检索这个id动态设置lable的值。 Connections和Endpoints都支持Label Overlays,并且因为更改标签是一种非常常见的操作,所以setLabel和getLabel方法已添加到这些对象中: 这些方法支持传入Function而不是String,如果在调用setLabel时,jsPlumb将为您创建一个标签覆盖: (5) Custom(自定义) jsPlumb允许自定义OverLays,只需要实现 create(component): 自定义覆盖允许创建自己的覆盖层,jsPlumb将为您定位。只需要实现一个方法 - create(component): 此处的id为 customeOverlay,可以在 Connection 或者 Endpoint上使用 getOverlay(id) 方法。 可以使用 setVisible 方法控制 Overlays 的显示属性,或者在一个连接上使用 showOverlay(id) 和 hideOverlay(id) 。 (1) 使用id (2) 使用 showOverlay(id) 和 hideOverlay(id)Connection 和 Endpoint 可以使用showOverlay(id) 和 hideOverlay(id): Connection和Endpoint有一个removeOverlay方法,可以删除覆盖 参考:http://jsplumb.github.io/jsplumb/overlays.html https://www.jianshu.com/p/0e7bb5c081c8下一篇:拓扑图编辑器-jsplum连接

如何动态实现拓扑图?

------解决方案--------------------

应该是div+css来实现动态的 拓扑图

ajax是用来对无刷新的拓扑图进行支持的

------解决方案--------------------

找绘图控件吧。网上好像有网页画流程图的架构,不过架构很重,也不稳定,建议你找个轻型的jquery控件,自己略做改动,做简单实现