[英]How to assign click event to every svg element in d3js
我在svg元素中添加了九個矩形。 如何為每個人添加點擊事件?
var nodeValues = [0, 1, 2, 3, 4, 5, 6, 7, 8];
var colors = ["aqua", "darkblue", "black", "red", "green", "gray", "navy", "orange", "teal"];
var main = d3.select("#main");
var svg = main.append("svg")
.data(nodeValues)
.attr("width", 300)
.attr("height", 300);
var elementAttr = function (index) {
return {
x: (index % 3) * 100,
y: Math.floor((index / 3)) * 100,
width: 95,
height: 95
}
}
for (var index in nodeValues) {
var rect = svg.append("rect")
.attr(elementAttr(index))
.style("fill", "red" );
}
這是Jsfiddle 。
更新 :我希望在點擊事件上更改矩形寬度等屬性。
for (var index in nodeValues) {
var rect = svg.append("rect")
.attr(elementAttr(index))
.style("fill", "red" )
.on('click', function(d,i) {
// handle events here
// d - datum
// i - identifier or index
// this - the `<rect>` that was clicked
});
}
我重構了你的代碼,使其更像D3 - 特別是,如果你使用D3的選擇和數據匹配,你不需要循環。 然后代碼如下所示:
svg.selectAll("rect")
.data(nodeValues).enter().append("rect")
.each(function(d) {
var attrs = elementAttr(d);
d3.select(this).attr(attrs);
})
.style("fill", rectColor);
添加click處理程序只是在此結尾處的另一個語句:
.on("click", function() {
d3.select(this).attr("width", 120);
});
在這里完成演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.