【发布时间】:2017-04-01 22:11:08
【问题描述】:
我想知道如何在 D3.js 中解决这个问题。下面的代码每 5 秒进入、更新或退出,并显示或消失随机数的 name 元素,这些元素是数组 dataset 的一部分。该数组还包含id 元素。现在我想单击屏幕上出现的更新元素,例如"foo",并希望它是id(这意味着1)在我单击"foo"element 后出现。该函数的名称称为testfunction,但我认为该函数有问题。问题是,原来的name文字在点击后全部消失,而新的id文字出现了。但我希望他们在使用clickfunction 后都出现在屏幕上希望你们中的一些人能提供帮助。谢谢
var svg = d3.select("body").append("svg");
var dataset = [{
name: "foo", id: "1"
}, {
name: "bar", id: "2"
}, {
name: "baz", id: "3"
}, ];
print(dataset);
setInterval(() => {
var data = dataset.slice(Math.random() * 6);
print(data);
}, 7000);
function print(data) {
var texts = svg.selectAll(".texts")
.data(data);
textsExit = texts.exit().remove();
textsEnter = texts.enter()
.append("text")
.attr("class", "texts");
textsUpdate = texts.merge(textsEnter)
.attr("x", 10)
.attr("y", (d, i) => 20 + i * 16)
.text((d,i) => "TextNumber" + (i+1) + ", name: " + d.name)
.on("click", testfunction);
function testfunction(){
textsUpdate
.attr("x", 200)
.attr("y", function(d, i) { return (490 + i * 28)})
.text(function(d, i) { return "IDNumber" + (i+1) + ", Name: "+ d.id})
};
}
【问题讨论】:
-
只是目测,我怀疑该行应该是
.on("click", testfunction);,但我不保证 -
你是def。对了。我只是稍微编辑了一下代码和描述,因为还是有问题。非常感谢,卢卡斯!
标签: javascript jquery d3.js svg enter