我正在开发一个 d3.js 项目,在该项目中我将多个矩形显示为相同的高度。矩形连接到input[type=number]
调整每组矩形高度的a。为了使动画更容易(所以我只需要操作svg:defs
数字输入的 onchange),我希望能够使用如下svg:def
标签指定一组矩形的高度:
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500);
svg.append("defs").selectAll(".rectdef")
.data(data).enter()
.append("rect")
.attr("class", "rectdef")
.attr("id", function (d, i){return "rect" + d.name;})
.attr("x", 0) // overridden below
.attr("width", 0) // overridden below
.attr("y", 0) // overridden below
.attr("height", function (d, i){return d.height});
然后能够通过以下方式优化矩形的位置 x、y 和宽度:
svg.selectAll(".bar")
.data(data).enter()
.append("use")
.attr("class", "bar")
.attr("xlink:href",function (d){return "#rect"+d.type;})
.attr("x", function(d) { return d.x })
.attr("width", function (d) {return d.w;}) // this does NOT adjust width!
.attr("y", function (d) {return 0;});
此代码段正确更改了 x 和 y 坐标,但没有正确更改宽度!有什么想法吗?这是浏览器问题吗(我使用的是 Chrome 24.0.1312.52)?在 svg:use 标签上,宽度是否不可编辑?
数据没有任何问题(我已经检查过了),并且我已经能够确认动画确实可以正常工作。