Javascript / D3. js / forceimulation / force -arded - PullRequest
0 голосов
/ 05 августа 2020

Посоветуйте, пожалуйста, что не так в следующем коде. Я хочу создать ориентированный на foce граф с помощью D3. js

Я не могу найти, где исправить в следующем коде.

Пожалуйста, сообщите мне, что было не так в следующем коде. Я хочу создать ориентированный на foce граф с помощью D3. js

Я не могу найти, где исправить в следующем коде.

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>D3 v5 force simulation</title>
</head>

<body>
  <svg width="400" height="300"></svg>
  <script src="https://d3js.org/d3.v5.min.js"></script>
  <script>
 
  var nodesData = [
    {id:"Korea", "group": 1},
    {id:"USA", "group": 1},
    {id:"France", "group": 1},
    {id:"UK", "group": 1},
    {id:"Japan", "group": 1},
    {id:"Turkey", "group": 1},
  
  ]

  var linksData = [
    { "source": 'Korea', "target": 'USA'},
    { "source": 'UK', "target": 'USA' },
    { "source": 'France', "target": 'Turkey' },
    { "source": 'Korea', "target": 'UK' },
    { "source": 'Japan', "target": 'Turkey' },
    { "source": 'Japan', "target": 'Korea' }
  ]

  
  var link = d3.select("svg")
    .selectAll("line")
    .data(linksData)
    .enter()
    .append("line")
    .attr("stroke-width", 1)
    .attr("stroke", "black");

  var node = d3.select("svg")
    .selectAll("circle")
    .data(nodesData)
    .enter()
    .append("circle")
    .attr("r", 10)
    .attr("fill", "LightSalmon")
    .call(d3.drag()
      .on("start", dragstarted)
      .on("drag", dragged)
      .on("end", dragended));

 
  var simulation = d3.forceSimulation()
    .force("link", d3.forceLink())
    .force("charge", d3.forceManyBody())
    .force("center", d3.forceCenter(200, 150));

  simulation
    .nodes(nodesData)
    .on("tick", ticked);

  simulation.force("link")
    .links(linksData);

  
  function ticked() {
    link
      .attr("x1", function(d) { return d.source.x; })
      .attr("y1", function(d) { return d.source.y; })
      .attr("x2", function(d) { return d.target.x; })
      .attr("y2", function(d) { return d.target.y; });
    node
      .attr("cx", function(d) { return d.x; })
      .attr("cy", function(d) { return d.y; });
  }

 
  function dragstarted(d) {
    if(!d3.event.active) simulation.alphaTarget(0.3).restart();
    d.fx = d.x;
    d.fy = d.y;
  }

  function dragged(d) {
    d.fx = d3.event.x;
    d.fy = d3.event.y;
  }

  function dragended(d) {
    if(!d3.event.active) simulation.alphaTarget(0);
    d.fx = null;
    d.fy = null;
  }
  </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...