尽管无数次阅读了 D3 API,但我仍在努力理解 D3 中的合并功能。
API 说:“此方法通常用于合并数据连接后的输入和更新选择。分别修改输入和更新元素后,您可以合并两个选择并对两者执行操作,而无需重复代码。”
这是一个在力导向图表中假定直接使用它的示例,其中每次报价都会调用 ticked 函数:
var simulation = d3.forceSimulation(nodes)
.force("charge", chargeForce)
.force("center", centerForce)
.on("tick", ticked);
function ticked() {
var u = d3.select("svg").selectAll("circle").data(nodes)
u.enter().append("circle").attr("r",5)
.merge(u) // What is the merge function doing here?
.attr("cx", d => d.x)
.attr("cy", d => d.y)
u.exit().remove() // Why is it necessary to remove excess objects w/ the exit selection?
}
我了解数据绑定的工作原理,以及 enter() 和 exit() 选择的工作原理。但是,我以前从未使用过“合并”,而且我不明白它在这里做什么。如果有人可以逐步简要介绍此功能中发生的事情,那将非常有用。我相信其他人也有类似的问题。
原文由 Harrison Cramer 发布,翻译遵循 CC BY-SA 4.0 许可协议
该文档很好地解释了该功能的作用,所以它所做的是而不是你必须这样做
你可以打电话
attr
一次It will set attributes
cx
andcy
on bothu
-the update selection andu.enter()
-the enter selection因为出口选择包含任何额外的 DOM 元素,这些元素未绑定到您传递给
data()
的数组中的元素,所以您可以在出口集合上做任何您需要的事情,例如通过调用设置样式u.exit().style(...)
等,而不是调用remove
从 DOM 中删除它们