gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:07 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com