选项 A:创建树状图并将粘性选项设置为 true .sticky(true)
:。树形图布局为您提供 x、y、宽度和高度值,您可以使用它们来操作 DOM/SVG。粘性选项负责平滑过渡。
选项 B:使用纯 html 元素,例如div
代替svg:rect
元素。如果您真的只是操纵宽度,那应该是更合理的选择:
<style>
#container div{ float: left; }
</style>
<div id="container">
<div id="first" style="width:100px; height:100px; background-color:red;" ></div>
<div id="second" style="width:100px; height:100px; background-color:green;" ></div>
<div id="third" style="width:100px; height:100px; background-color:blue;" ></div>
</div>
使用纯 html,您可以操纵宽度,浏览器的布局/CSS 引擎处理浮动。D3 不限于 SVG,它还可以处理普通的 html 元素(树形图示例也使用div
元素)。
顺便说一句:在 d3 中,您不应该直接操作 DOM。始终考虑基础数据并使更新数据驱动,即,当使用树图时,您将在源数据中设置item.value
数据item
,例如:
data = [ {value: 100}, {value:200}, {value:100} ]
//...
updateData() //changes some values in your data
drawChart() //draws the whole chart based on the data, e.g., computes the x, y,
//width, height from the `item.value` (e.g., via d3.layout.treemap)
//and manipulates/animates the DOM via d3