как добавить содержимое div для каждого узла, чтобы показать некоторую информацию о клике в макете дерева d3 - PullRequest
3 голосов
/ 25 сентября 2019

Пожалуйста, предложите, как сделать узел свернутым под одним узлом в макете дерева d3. Я хочу добавить узел щелчка, чтобы показать некоторую дополнительную информацию, и я хочу, чтобы все узлы в этой диаграмме свернулись под одним узлом при первой загрузке икак сейчас я могу сделать индикатор выполнения на том же прямоугольнике, но я не хочу этого делать, так как я хочу разместить индикатор выполнения внутри каждого узла прямоугольника, но я не могу это сделать enter image description here

вот мой код

              <!DOCTYPE html>
              <meta charset="utf-8">
              <style>

              body {
              text-align: center;
              }

              svg {
              margin-top: 32px;
              border: 1px solid #aaa;
              }

              .person rect {
              fill: #f9cabe;
              stroke: #4e544fe0;
              stroke-width: 1px;
              }

              .person rect.progressBar {
                fill: #87d884;
              }

              .person {
                font: 14px sans-serif;
              }


              .link {
              fill: none;
              stroke: #ccc;
              stroke-width: 1.5px;
              }

              .rcorners2
              {
              border-radius: 25px;
              border: 2px solid #73AD21;
              padding: 20px;
              width: 200px;
              height: 350px;
              }


              </style>
              <body>
              <p class="rcorners2"> </p>
              <script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
              <script>

              var data;

              var boxWidth = 150,
              boxHeight = 30;

              // Setup zoom and pan
              var zoom = d3.behavior.zoom()
              .scaleExtent([.1,1])
              .on('zoom', function(){
              svg.attr("transform", "translate(" + d3.event.translate + ") scale(" + d3.event.scale + ")");
              })
              // Offset so that first pan and zoom does not jump back to the origin
              .translate([150, 200]);

              var svg = d3.select("body").append("svg")
              .attr('width', 1000)
              .attr('height', 500)
              .call(zoom)
              .append('g')
              // Left padding of tree so that the whole root node is on the screen.
              // TODO: find a better way
              .attr("transform", "translate(150,200)");



              var tree = d3.layout.tree()
              // Using nodeSize we are able to control
              // the separation between nodes. If we used
              // the size parameter instead then d3 would
              // calculate the separation dynamically to fill
              // the available space.
              .nodeSize([90, 200])
              // By default, cousins are drawn further apart than siblings.
              // By returning the same value in all cases, we draw cousins
              // the same distance apart as siblings.
              .separation(function(){
              return .5;
              })
              // Tell d3 what the child nodes are. Remember, we're drawing
              // a tree so the ancestors are child nodes.
              .children(function(person){
                  return person._parents;
              });

              d3.json('data/4gens.json', function(error, json){

              if(error) {
              return console.error(error);
              }

              var nodes = tree.nodes(json),
              links = tree.links(nodes);

              // Style links (edges)
              svg.selectAll("path.link")
              .data(links)
              .enter().append("path")
              .attr("class", "link")
              .attr("d", elbow);

              // Style nodes
              var node = svg.selectAll("g.person")
              .data(nodes)
              .enter().append("g")
              .attr("class", "person")
              .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; });

              // Draw the rectangle person boxes
              node.append("rect")
              .attr({
              x: -(boxWidth/2),
              y: -(boxHeight/2),
              width: boxWidth,
              height: boxHeight
              });

              node.append('rect')
              .attr('class', 'progressBar')
              .attr('x', -(boxWidth/2))
              .attr('y', -(boxHeight/2))
              .attr('width', d => parseInt(d.progress.split('|')[1].trim()) / 100 * boxWidth)
              .attr('height', boxHeight);

              // Draw the person's name and position it inside the box
              node.append("text")
              .attr("dx", -(boxWidth/2) + 10)
              .attr("dy", 0)
              .attr("text-anchor", "start")
              .attr('class', 'name')
              .text(function(d) {
              return d.name;
              });

              node.append("text")
              .attr("dx", -(boxWidth/2) + 10)
              .attr("dy", 12)
              .attr("text-anchor", "start")
              .attr('class', 'About SPAN')
              .text(function(d) {
              return d.progress;
              });

              });

              /**
              * Custom path function that creates straight connecting lines.
              */
              function elbow(d) {
              return "M" + d.source.y + "," + d.source.x
              + "H" + (d.source.y + (d.target.y-d.source.y)/2)
              + "V" + d.target.x
              + "H" + d.target.y;
              }

              </script>

вот мой файл json

            {
            "name": "CDO",
            "progress": "100%  |      0%",
            "_parents": [
              {
                "name": "Completeness",
                "progress": "100%  |      43%",
                "_parents": [
                  {
                    "name": "Priority Fields",
                    "progress": "100%  |      67%",
                    "_parents": [
                      {
                        "name": "Item Name",
                        "progress": "100%  |      67%"
                      },
                      {
                        "name": "UNSPSC / NDC",
                        "progress": "100%  |      79%"
                      }
                    ]
                  },
                  {
                    "name": "Others Fields",
                    "progress": "100%  |      79%",
                    "_parents": [
                      {
                        "name": "UOM",
                        "progress": "100%  |      67%"
                      },
                      {
                        "name": "Facility, City/State",
                        "progress": "100%  |      79%"
                      },
                      {
                        "name": "Supplier& Part No.",
                        "progress": "100%  |      79%"
                      }
                    ]
                  }
                ]
              },
              {
                "name": "Conformity",
                "progress": "100%  |      54%",
                "_parents": [
                  {
                    "name": "Priority Fields",
                    "progress": "100%  |      32%"

                  },
                  {
                    "name": "Others Fields",
                    "progress": "100%  |      93%"
                  }
                ]
              },
              {
                "name": "Consistency",
                "progress": "100%  |      54%",
                "_parents": [
                  {
                    "name": "Priority Fields",
                    "progress": "100%  |      32%"
                  },
                  {
                    "name": "Others Fields",
                    "progress": "100%  |      93%"
                  }
                ]
              },
              {
                "name": "Uniqueness",
                "progress": "100%  |      54%",
                "_parents": [
                  {
                    "name": "Priority Fields",
                    "progress": "100%  |      32%"
                  },
                  {
                    "name": "Others Fields",
                    "progress": "100%  |      93%"
                  }
                ]
              },
              {
                "name": "Accuracy",
                "progress": "100%  |      54%",
                "_parents": [
                  {
                    "name": "Priority Fields",
                    "progress": "100%  |      32%"
                  },
                  {
                    "name": "Others Fields",
                    "progress": "100%  |      93%"
                  }
                ]
              }
            ]
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...