使用GOJS实现tree结构

实现的效果图如下:
在这里插入图片描述
CSS:

  <link href='https://fonts.googleapis.com/css?family=Droid+Serif:400,700' rel='stylesheet' type='text/css'>

HTML:

<div id="sample">
  <div id="regionTree" style="background-color: white; border: solid 1px black; width: 100%; height: 550px"></div>
</div>

JavaScript:

<script src="../libs/jquery/jquery-3.4.1.min.js"></script>
<script src="../libs/goJs/go.js"></script>

<script id="code">
  $(function(){
    var $ = go.GraphObject.make;  // for conciseness in defining templates

    regionTree = $(go.Diagram, "regionTree",  // must be the ID or reference to div
                  {
                      "toolManager.hoverDelay": 100,  // 100 milliseconds instead of the default 850
                      allowCopy: false,
                      layout:  // create a TreeLayout for the family tree
                      $(go.TreeLayout,
                          { angle: 90, nodeSpacing: 10, layerSpacing: 40, layerStyle: go.TreeLayout.LayerUniform })
                  });

    var bluegrad = '#90CAF9';
    var pinkgrad = '#F48FB1';
    var greengrad = 'green';
    var cyangrad = 'cyan';
    var skybluegrad = 'skyblue';

    // Set up a Part as a legend, and place it directly on the diagram
    regionTree.add(
      $(go.Part, "Table",
        { position: new go.Point(300, 10), selectable: false },
        $(go.TextBlock, "北京",
          { row: 0, font: "700 14px Droid Serif, sans-serif" }),  // end row 0
        $(go.Panel, "Horizontal",
          { row: 1, alignment: go.Spot.Left },
          $(go.Shape, "Rectangle",
            { desiredSize: new go.Size(30, 30), fill: bluegrad, margin: 5 }),
          $(go.TextBlock, "通州区",
            { font: "700 13px Droid Serif, sans-serif" })
        ),  // end row 1
        $(go.Panel, "Horizontal",
          { row: 2, alignment: go.Spot.Left },
          $(go.Shape, "Rectangle",
            { desiredSize: new go.Size(30, 30), fill: pinkgrad, margin: 5 }),
          $(go.TextBlock, "丰台区",
            { font: "700 13px Droid Serif, sans-serif" })
        )  // end row 2
      ));

    // define Converters to be used for Bindings
    function genderBrushConverter(gender) {
      if (gender === "0") return bluegrad;
      if (gender === "1") return pinkgrad;
      if (gender === "2") return greengrad;
      if (gender === "3") return cyangrad;
      if (gender === "4") return skybluegrad;
      return "orange";
    }

    // replace the default Node template in the nodeTemplateMap
    regionTree.nodeTemplate =
      $(go.Node, "Auto",
        new go.Binding("text", "name"),
        $(go.Shape, "Rectangle",
          {
            fill: "lightgray",
            stroke: null, strokeWidth: 0,
            stretch: go.GraphObject.Fill,
            alignment: go.Spot.Center
          },
          new go.Binding("fill", "gender", genderBrushConverter)),
        $(go.TextBlock,
          {
            font: "700 12px Droid Serif, sans-serif",
            textAlign: "center",
            margin: 10, maxSize: new go.Size(80, NaN)
          },
          new go.Binding("text", "name"))
      );

    // define the Link template
    regionTree.linkTemplate =
      $(go.Link,  // the whole link panel
        { routing: go.Link.Orthogonal, corner: 5, selectable: false },
        $(go.Shape, { strokeWidth: 3, stroke: '#424242' }));  // the gray link shape

    // here's the family data
    var nodeDataArray = [
      { key: 0, name: "北京", gender: "0", birthYear: "1865", deathYear: "1936", reign: "1910-1936" },
      { key: 1, parent: 0, name: "通州区", gender: "1", birthYear: "1894", deathYear: "1972", reign: "1936" },
      { key: 2, parent: 0, name: "丰台区", gender: "1", birthYear: "1895", deathYear: "1952", reign: "1936-1952" },
      { key: 7, parent: 2, name: "云冈", gender: "2", birthYear: "1926", reign: "1952-" },
      { key: 16, parent: 7, name: "王佐镇", gender: "3", birthYear: "1948" },
      { key: 38, parent: 16, name: "东王佐村", gender: "4", birthYear: "1982" },
      { key: 39, parent: 16, name: "佃起村", gender: "4", birthYear: "1984" },
      ];

    // create the model for the family tree
    regionTree.model = new go.TreeModel(nodeDataArray);
  })
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值