Svg getBBox() 使用

API 作用

getBBox() 用于获取元素范围的最小矩形边际,这个元素可以放置到此矩形当中。
返回结果:

  • x: 矩形的x坐标(用户坐标)
  • y: 矩形的y坐标(用户坐标)
  • width:矩形的宽度
  • height:矩形的高度

代码示例

示例1

示例中显示边框,包裹Apptalking 智能应用性能管理系统 文字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500);

var text = svg.append("text")
.attr("x", 480)
.attr("y", 250)
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.style("font", "100 48px Helvetica Neue")
.text("Apptalking 智能应用性能管理系统");

var bbox = text.node().getBBox();

var rect = svg.append("rect")
.attr("x", bbox.x)
.attr("y", bbox.y)
.attr("width", bbox.width)
.attr("height", bbox.height)
.style("fill", "#ccc")
.style("fill-opacity", ".3")
.style("stroke", "#666")
.style("stroke-width", "1.5px");
</script>

transform 对 getBBox()的影响

getBBox() 是获取未执行transform 的位置和大小,如果执行了transform 那么将不会匹配。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE html>
<meta charset="utf-8">

<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500);

var text = svg.append("text")
.attr("x", 480)
.attr("y", 250)
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.style("font", "100 48px Helvetica Neue")
.text("Apptalking 智能应用性能管理系统")
.attr('transform',"scale(0.5)");

var bbox = text.node().getBBox();

var rect = svg.append("rect")
.attr("x", bbox.x)
.attr("y", bbox.y)
.attr("width", bbox.width)
.attr("height", bbox.height)
.style("fill", "#ccc")
.style("fill-opacity", ".3")
.style("stroke", "#666")
.style("stroke-width", "1.5px");

</script>