javascript - 如何更改 SVG 元素上的曲线

标签 javascript d3.js svg

我有这个函数可以在两点之间创建一条曲线

var amountOfCurve = (d.noOfSameConnections+1); //between 0 and 10
        var dy = d.target.x - d.source.x,
        dx = d.target.y - d.source.y,
        dr = Math.sqrt(dx * dx + dy * dy) *(amountOfCurve);

        return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + (d.target.x) + "," + (d.target.y);

某些链接具有相同的源和目标。我在 noOfSameConnections 中解决了这个问题。但我想要的是不同大小的曲线,因为两个节点之间最多只能有两个链接,我希望链接以另一种方式弯曲。所以我会做这样的事情:

if(d.noOfSameConnections === 1){
//curve one way
} else {
//curve the other
}

但我似乎不知道如何切换曲线:(

最佳答案

圆弧的方向可以通过sweep控制flag .

<!DOCTYPE html>
<html>

  <head>
    <script data-require="d3@3.5.3" data-semver="3.5.3" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.js"></script>
  </head>

  <body>
    <script>
      
      var svg = d3.select('body')
        .append('svg')
        .attr('width', 500)
        .attr('height', 500);
        
      var d = {
        source: {
          x: 10,
          y: 10
        },
        target: {
          x: 490,
          y: 490
        }
      };
      
     var dy = d.target.x - d.source.x,
         dx = d.target.y - d.source.y,
         dr = Math.sqrt(dx * dx + dy * dy) * 0.8;
         
      var largeSweep = 0;
      var sweep = 1;
        
      svg.append("path")
        .attr("d", "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 " + largeSweep + "," + sweep + " " + d.target.x + "," + d.target.y)
        .style("fill", "none")
        .style("stroke", "steelblue")
        .style("stoke-width", 2);
        
      largeSweep = 0;
      sweep = 0;
        
      svg.append("path")
        .attr("d", "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 " + largeSweep + "," + sweep + " " + d.target.x + "," + d.target.y)
        .style("fill", "none")
        .style("stroke", "orange")
        .style("stoke-width", 2);
      
    </script>
  </body>

</html>

关于javascript - 如何更改 SVG 元素上的曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898739/

相关文章:

javascript - 如何创建类似于 Grooveshark 的进度 "bar"?

javascript - 如何将 id 从一个弹出窗口发送到另一个弹出窗口?

javascript - 通过调用Ajax设置struts bean值

android - 从 ImageView 的 url 加载 svg 文件

javascript - 使用 d3 更改 SVG 元素

javascript - 单击一个 div 使另一个 div 出现/消失

javascript - 使用 dc.js、d3.js 和 crossfilter 的引用错误

javascript - D3 折线图上的标签不起作用

javascript - d3.js 中的多行转换

javascript - 对于 svg :text element in Firefox 15,宽度似乎始终为零(或 NaN)