javascript - D3.js 中的样式和属性

标签 javascript css d3.js

我是 D3.js 的新手,正在关注 tutorial .

我很困惑为什么下面的circle.style("fill", "steelblue"); 没有生效;但如果将样式行放在 circle.enter().append("circle") 行之后,它可以为所有圆圈填充颜色。以我的理解,样式是全局的,应该应用于所有圈子,或者至少在以下代码中影响html中的现有圈子。

//js
var svg = d3.select("svg");
var circle = svg.selectAll("circle").data([32, 57, 112, 293], function(d) { return d; });
circle.style("fill", "steelblue");
circle.enter().append("circle")
    .attr("cy", 60)
    .attr("cx", function(d, i) { return i * 100 + 30; })
    .attr("r", function(d) { return Math.sqrt(d); });
circle.exit().remove();



//html
<svg width="720" height="120">
<circle cx="40" cy="60" r="10"></circle>
<circle cx="80" cy="60" r="10"></circle>
<circle cx="120" cy="60" r="10"></circle>
</svg>

谢谢!

最佳答案

代码第一次运行时,圆圈选择的大小为零,因为没有与键匹配的元素。所有圆形元素都将放入退出选择中。 data 方法返回最初为空的更新选择,它的(第二维)长度等于传递给 .data 的第一个参数的第一维的长度,但选择的每个元素都是 null。直到执行 enter 方法,才会创建新节点,并合并 enter 和 update 选择。

如果代码再次运行,例如将一个数据元素替换为一个新值,则三个匹配的节点将被放置在更新选择中,并将由 .data 返回。不匹配的将被放置在退出选择中,其在更新选择中的旧位置将被设置为空。一个附加了新数据元素的占位符对象将被放置在输入选择中,该选择将以对 .append 之后新创建节点的引用结束,并将合并到更新选择中通过 .enter

如果你不使用键函数,那么,第一次,三个现有节点将在更新选择中,连同一个空值,一个占位符将被放入输入选择中并附加数据(with在这种情况下值为 293)。退出选择将为空(长度为 0),并且将创建一个新节点并将其添加到输入选择中,并绑定(bind)新的数据元素。此时,更新选择 (circle) 会将输入选择与其合并。它是空条目,已被绑定(bind)了新数据的新节点替换。这是调用 .enter 的副作用。

但是,如果您随后再次调用代码,更改数据元素的顺序(仍然使用相同的一组值,但都位于数组中的不同位置),则退出和进入选择将为空,但是绑定(bind)到所有节点的数据值将被更改。如果您在这种情况下使用 key ,则什么都不会改变。

关于javascript - D3.js 中的样式和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169121/

相关文章:

javascript - 轴上刻度值的格式

javascript - firebug 上的 "this._processor is null"错误是什么?

javascript - 在 Vue 2.1 中使用另一个下拉列表动态更新一个下拉列表

javascript - 如何在关闭选项卡事件上执行功能?

javascript - HTML 按钮和 Controller 未连接

html - CSS - 100vh 响应式图像

html - div 外边框

d3.js交互式分组条形图交替旋转

multidimensional-array - 沉迷于 D3.js – 使用多维数组填充选择下拉列表

javascript - 如何在不使用 jQuery 的情况下在工具提示中显示 div 标记的文本内容?