javascript - 使用 d3 绘制箭头

标签 javascript jquery d3.js

在这个 fiddle 中,我试图绘制一个箭头:

var svgContainer = d3.select("body").append("svg")
            .attr("width", 1200)
            .attr("height", 1200)
            .attr("text-align" , "center");

    var arrowStartPosition = 5
    var arrowSpacing = 60
    var verticalStrokeColor = "black"
    var arrowYStartPosition = 5
    var arrowYEndStartPosition = 150
    var margin = 150;

    var labelLine = svgContainer.append("line")
            .attr("x1", arrowStartPosition + margin)
            .attr("y1", arrowYStartPosition)
            .attr("x2", arrowStartPosition + margin)
            .attr("y2", arrowYEndStartPosition)
            .attr("stroke-width", 2)
            .attr("stroke", verticalStrokeColor);

    var right = svgContainer.append("line")
            .attr("x1", arrowStartPosition + margin)
            .attr("y1", arrowYStartPosition)
            .attr("x2", 20 + margin)
            .attr("y2", 20)
            .attr("stroke-width", 2)
            .attr("stroke", "black");

    var left = svgContainer.append("line")
            .attr("x1", right.attr("x1")-15)
            .attr("y1", right.attr("y1")+15)
            .attr("x2", 5 + margin)
            .attr("y2", 5)
            .attr("stroke-width", 2)
            .attr("stroke", "black");

为了尝试保持代码通用,我尝试根据右侧的位置绘制箭头的左侧部分:

.attr("y1", right.attr("y1")+15)

但是从 fiddle 中可以看出:

https://jsfiddle.net/Qh9X5/3447/

箭头绘制不正确。

我认为这是因为 right.attr("y1") 值在绘制时未初始化?

任何关于实现相同结果的更优雅方法的指示都值得赞赏。

最佳答案

无需 JavaScript!使用 SVG <marker/> :

  <svg>
    <defs>
      <marker id="arrow-head" markerWidth="13" markerHeight="13" refx="5" refy="5" orient="auto">
        <path d="M0,0 L0,10 L10,5 L0,0" style="fill: #000000;" />
      </marker>
    </defs>

    <path d="M0,0 L10,20 L20,50 L30,30 L40,40 L50,50" style="stroke: #000000; stroke-width: 1px; fill: none; marker-end: url(#arrow-head);"/>
  </svg>

Here's a demo in JSBin

关于javascript - 使用 d3 绘制箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26789005/

相关文章:

Javascript 将值从弹出窗口传递到其父窗口

javascript - 使用 html 和 javascript 在鼠标单击和按键时调用相同的函数

javascript - 在 AngularJS 中刷新服务器生成的模板

javascript - 重置事件动画 jQuery

javascript - 用户滚动到页面底部超时后添加类

svg - 使用 d3 javascript 库时在路径上的特定点放置箭头(标记)

javascript - 如何防止事件处理程序在 javascript 中一次处理多个事件?

jquery - 缩小代码中的额外换行符?

javascript - 是否有可能获得当前在 D3 力模拟中活跃的力列表?

javascript - 带有 Topojson 的 D3 只渲染部分 map