<html>
<body>
<div>
<!-- d3js -->
<svg id="aaa">
</svg>
</div>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script>
// data를 임의로 만들고,
var circle_lst = [];
for (var i = 0; i < 10; i = i + 1) {
circle_lst.push(
{
"id": "ID_"+String(i),
"cx": Math.random() * 800,
"cy": Math.random() * 500,
"r": Math.random() * 100,
})
}
// svg를 선택하고 몇가지 특성을 정의해주고.
var svg = d3.select("#aaa");
svg.attr('height', function (d) { return 500 })
.attr('width', function (d) { return 1000 });
// circle을 선택하고, 없기 때문에 넘치는 데이터의 수만큼 더 만들어주고,
// 또 각각의 요소의 특성을 설정해줍니다.
svg.selectAll("circle").data(circle_lst).enter().append("circle")
.attr('id', function (d) { return d['id'] })
.attr('cx', function (d) { return d['cx'] })
.attr('cy', function (d) { return d['cy'] })
.attr('r', function (d) { return d['r'] })
.attr('fill', function (d) { return 'blue' })
.attr('fill-opacity', function (d) { return 0.2 })
.attr('stroke', function (d) { return 'black' })
.attr('stroke-width', function (d) { return 5 })
// mouse가 해당 개체 위에 있을때 스타일 변화
.on("mouseover", function (d) {
// 마우스가 올라왔을 때 스타일 변화를 지정해주고,
d3.select(this)
.transition()
.attr("fill-opacity", 1.0)
.duration(50);
// 마우스가 올라왔을때 텍스트가 새롭게 생성되도록 해줍니다.
var text_id = d["id"]+"_text";
// 아래처럼 현재 요소의 부모노드를 설정하도록 해도 되고,
// 아니면, 해당 svg를 바로 찾아도 됩니다.
d3.select(this.parentNode)// ex) d3.select("#aaa")
.append("text")
.attr("id", d["id"]+"_text")
.attr("x", d["cx"] + d["r"])
.attr("y", d["cy"] + d["r"])
.attr("font-size", "10px")
.text(function () { return [d["cx"], d["cy"]] })
})
// mouse가 해당 개체 를 벗어났을 때 스타일 변화
.on("mouseout", function (d) {
// 마우스가 해당 개체를 벗어났을 때의 스타일 변화를 지정해주고,
d3.select(this)
.transition()
.attr("fill-opacity", 0.2)
.duration(50);
// 텍스트를 제거해줍니다.
var text_id = d["id"] + "_text";
d3.select("#"+text_id).remove();
});
</script>
</body>
</html>
댓글남기기