我有几个包含人名的圈子,我需要使用d3.js显示他们在矩形圈中点击的信息
以下是我的剧本
var width = 960,
height = 500;
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
d3.json("data.json", function (json) {
/* Define the data for the circles */
var elem = svg.selectAll("g myCircleText")
.data(json.nodes)
/*Create and place the "blocks" containing the circle and the text */
var elemEnter = elem.enter()
.append("g")
.attr("transform", function (d) { return "translate(" + d.x + ",80)" })
/*Create the circle for each block */
var circle = elemEnter.append("circle")
.attr("r", function (d) { return d.r })
.attr("stroke", "black")
.attr("fill", "white")
.on("click", function () {
var s = svg
.selectAll("circle");
s
.append("rect")
.attr("x", 100)
.attr("y", 200)
.attr("width", 200)
.attr("width", 200)
.style("fill", "red");
});
/* Create the text for each block */
elemEnter.append("text")
.attr("dx", function (d) { return -20 })
.text(function (d) { return d.label })
})
below is the json file:
{"nodes":[
{"x":80, "r":40, "label":"Sam","info":"Developer"},
{"x":200, "r":60, "label":"Pam","info":"Programmer"},
{"x":380, "r":80, "label":"Ram","info":"Architect"}
]}
正在用名字绘制圆圈,但是当我点击圆圈时,没有任何事情发生。
请帮忙。
由于
答案 0 :(得分:4)
onclick功能有两个问题。首先,第二次设置width
而不是高度:
.attr("width", 200)
.attr("width", 200)
其次,你要在圆圈上添加一个矩形:
var s = svg.selectAll("circle");
s.append("rect")
对svg无效:
<circle r="60" stroke="black" fill="white">
<rect></rect>
</circle>
相反,矩形应该附加到svg的根或g元素。
工作代码:
.on("click", function () {
svg.append("rect")
.attr("x", 100)
.attr("y", 200)
.attr("width", 200)
.attr("height", 200)
.style("fill", "red");
});