Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在绘制D3.js元素之前获取其尺寸?_Javascript_Angularjs_D3.js - Fatal编程技术网

Javascript 如何在绘制D3.js元素之前获取其尺寸?

Javascript 如何在绘制D3.js元素之前获取其尺寸?,javascript,angularjs,d3.js,Javascript,Angularjs,D3.js,我使用AngularJS和D3.js的组合,根据从API检索到的数据动态绘制线条图 下面是我的y轴的图片。如你所见,我画了一条黑色的垂直线,代表0到100%。我有5个勾号,标有它们的相关百分比 以下是生成此代码的代码: var yScaleIntervals = 4; var yMaxlabel = 100; for (var i = 0; i <= yScaleIntervals; i++) { var tickY = self.yBottom -

我使用AngularJS和D3.js的组合,根据从API检索到的数据动态绘制线条图

下面是我的y轴的图片。如你所见,我画了一条黑色的垂直线,代表0到100%。我有5个勾号,标有它们的相关百分比

以下是生成此代码的代码:

    var yScaleIntervals = 4;
    var yMaxlabel = 100;
    for (var i = 0; i <= yScaleIntervals; i++) {
      var tickY = self.yBottom - (self.yPixSpan  * (i/yScaleIntervals));
      var tickLabel = ((100 * i)/yScaleIntervals).toString() + '%';
      console.log("tickY = ", tickY);
      self.svgContainer.append("line")
        .attr("x1", self.yScaleX - 2)
        .attr("y1", tickY)
        .attr("x2", self.yScaleX)
        .attr("y2", tickY)
        .attr("stroke-width", 1)
        .attr("stroke", "black");

      var YfontOffset = 30;
      var XfontOffset = 4;
      var label = self.svgContainer.append("text")
        .attr("x", yScaleX - YfontOffset)
        .attr("y", tickY + XfontOffset)
        .text(tickLabel)
        .attr("font-family", "Courier New")
        .attr("font-weight", "bold")
        .attr("font-size", "10px");
        .attr("fill", "black");

    }
var-yscaleinterval=4;
var yMaxlabel=100;
对于(var i=0;i
如何在文本之前获取这些边界框的尺寸
是在画布上画的吗

简而言之,您不需要。只需更改操作顺序,绘制它们,然后移动它们:

  var YfontOffset = 30;
  var XfontOffset = 4;
  var label = self.svgContainer.append("text")
    .text(tickLabel)
    .attr("font-family", "Courier New")
    .attr("font-weight", "bold")
    .attr("font-size", "10px");
    .attr("fill", "black")
    // using translate, so I can set the 
    // x/y in one attr call
    .attr("transform", function(d){
       var bb = this.getBBox();
       return "translate(" + fancyCalcX() + "," + fancyCalcY() + ")";
    });

完全跳过边界框并使用文本定位


但我必须改变文本的Y位置,而不仅仅是X。“文本锚定”似乎只改变了X的位置。而且,我不需要只在文本锚定“结束”处使用它位置。我需要进一步向左移动。要进一步向左移动,只需保留您的小XFontOffset值。对于y定位,请使用css属性对齐基线
,或者如果它也必须用于IE,请使用
dy
attr和
em
单元。
.style("text-anchor", "end");