黃浩錢 發表於 2019-10-15 14:06:00

HTML5 (canvase)拓扑图、关系图及vis.js关系图的使用

<h2>HTML5 (canvase)拓扑图、关系图:</h2>
<p>http://www.jtopo.com/demo/layout-circle.html</p>
<p>&nbsp;</p>
<h2>vis.js网址:</h2>
<p><span id="im-content_1571216417325" class="im-content"><span style="font-family: 微软雅黑">https://visjs.org/</span></span></p>
<p>&nbsp;</p>
<p><span class="im-content"><span style="font-family: 微软雅黑">vue项目中的使用:</span></span></p>
<p><span class="im-content"><span style="font-family: 微软雅黑">1、npm install vis</span></span></p>
<p>&nbsp;</p>
<p>2、在关系图的页面引入vis</p>
<p>&nbsp;</p>
<p> </p>
<div class="cnblogs_code">
<pre>import vis <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">vis</span><span style="color: rgba(128, 0, 0, 1)">'</span>;   <br>   或 <br><span style="color: rgba(0, 0, 255, 1)">const</span> vis=require(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vis</span><span style="color: rgba(128, 0, 0, 1)">"</span>);</pre>
</div>
<p>3、使用:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> vis关系图初始化</span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> init(body: any) {
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*处理关系类型数据 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    let dataArr: any </span>=<span style="color: rgba(0, 0, 0, 1)"> [];
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*定义links的数组 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    let linksArr: any </span>=<span style="color: rgba(0, 0, 0, 1)"> [];
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*处理返回的其他数据 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 节点数</span>
    body.forEach((item: any, index: number) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> if (index &lt; 20) {</span>
      let obj: any =<span style="color: rgba(0, 0, 0, 1)"> {
      id: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">,
      shape: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dot</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      color: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">,
      label: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
      };
      let objB: any </span>=<span style="color: rgba(0, 0, 0, 1)"> {
      id: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">,
      shape: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dot</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      color: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">,
      label: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
      };
      obj.id </span>=<span style="color: rgba(0, 0, 0, 1)"> item.asfzh;
      obj.label </span>=<span style="color: rgba(0, 0, 0, 1)"> item.asfzh;
      obj.color </span>= item.sfzZdrFlag1 === <span style="color: rgba(128, 0, 128, 1)">1</span> ? <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#f7220b</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#2aa2f7</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
      dataArr.push(obj);
      objB.id </span>=<span style="color: rgba(0, 0, 0, 1)"> item.bsfzh;
      objB.label </span>=<span style="color: rgba(0, 0, 0, 1)"> item.bsfzh;
      objB.color </span>= item.sfzZdrFlag2 === <span style="color: rgba(128, 0, 128, 1)">1</span> ? <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#f7220b</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#2aa2f7</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
      dataArr.push(objB);
    });

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关系</span>
    body.forEach((item: any, index: number) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> if (index &lt; 20) {</span>
      let linksObj: any =<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">from</span>: <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">,
      to: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">,
      label: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">,
      font: {align: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">top</span><span style="color: rgba(128, 0, 0, 1)">"</span>,color:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">from</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">},
      arrows: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">to</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      };
      linksObj.</span><span style="color: rgba(0, 0, 255, 1)">from</span> =<span style="color: rgba(0, 0, 0, 1)"> item.asfzh;
      linksObj.to </span>=<span style="color: rgba(0, 0, 0, 1)"> item.bsfzh;
      linksObj.label </span>= `${item.cnt}`;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">必须是字符串 不能是数字</span>
<span style="color: rgba(0, 0, 0, 1)">      linksArr.push(linksObj);
    });
    let strArr </span>=<span style="color: rgba(0, 0, 0, 1)"> [];
    let objArr </span>=<span style="color: rgba(0, 0, 0, 1)"> [];
    </span><span style="color: rgba(0, 0, 255, 1)">for</span> (let i = <span style="color: rgba(128, 0, 128, 1)">0</span>; i &lt; dataArr.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (strArr.indexOf(dataArr.id) == -<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">) {
      strArr.push(dataArr.id);
      objArr.push(dataArr);
      }
    }

    </span><span style="color: rgba(0, 0, 255, 1)">const</span> container = document.getElementById(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">network_id</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
    let nodes </span>=<span style="color: rgba(0, 0, 0, 1)"> objArr;
    let edges </span>=<span style="color: rgba(0, 0, 0, 1)"> linksArr;
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> data =<span style="color: rgba(0, 0, 0, 1)"> {
      nodes: nodes,
      edges: edges
    };
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自定义</span>
    <span style="color: rgba(0, 0, 255, 1)">const</span> options =<span style="color: rgba(0, 0, 0, 1)"> {
      autoResize: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> physics:false,</span>
<span style="color: rgba(0, 0, 0, 1)">      nodes: {
      shape: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dot</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      size: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
      font: {
          size: </span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">,
          color:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#8e8e8e</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
      },
      },
      edges: {
      width: </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
      smooth: {
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置两个节点之前的连线的状态</span>
          enabled: <span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认是true,设置为false之后,两个节点之前的连线始终为直线,不会出现贝塞尔曲线</span>
<span style="color: rgba(0, 0, 0, 1)">      },
      font:{
          color:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#8e8e8e</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
          strokeWidth: </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
      }
      },
      interaction: {
      dragNodes: </span><span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否能拖动节点</span>
      dragView: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否能拖动画布</span>
      hover: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">鼠标移过后加粗该节点和连接线</span>
      multiselect: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">按 ctrl 多选</span>
      selectable: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否可以点击选择</span>
      selectConnectedEdges: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">选择节点后是否显示连接线</span>
      hoverConnectedEdges: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">鼠标滑动节点后是否显示连接线</span>
      zoomView: <span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否能缩放画布</span>
<span style="color: rgba(0, 0, 0, 1)">      },
    };
    let network </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Vis.Network(container, data, options);
}</span></pre>
</div>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    sunshine15666<br><br>
来源:https://www.cnblogs.com/xiaolucky/p/11677356.html
頁: [1]
查看完整版本: HTML5 (canvase)拓扑图、关系图及vis.js关系图的使用