Wymyśliłem odpowiedź. Głównym problemem jest to, że D3 nie ma wyraźnej funkcji trigger
, tak jak robi to jQuery. Możesz jednak to zasymulować.
Say masz ścieżkę D3 zbudowany przez
d3.json("us-counties.json", function(json){
thisObj._svg.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", thisObj._path)
.attr("class", "states")
.attr("id", function(d){
return d.id; //<-- Sets the ID of this county to the path
})
.style("fill", "gray")
.style("stroke", "black")
.style("stroke-width", "0.5px")
.on("dblclick", mapZoom)
.on("mouseover", mapMouseOver)
.on("mouseout", mapMouseOut);
});
i obsługi zdarzeń mouseover że zmienia kolory obrysu i wypełnienia
var mapMouseOver(d){
d3.selectAll($("#" + d.id))
.style("fill", "red")
.style("stroke", "blue");
}
Zazwyczaj większość samouczki powiedzieć używać
d3.select(this)...
, ale w rzeczywistości przy użyciu wartości działa również. Jeśli masz moduł obsługi zdarzeń, który dostaje identyfikator węzła, i wyzwolić go poprzez
$("#someDropdownSelect").change(someEventHandler)
function someEventHandler(){
//get node ID value, sample
var key = $(this)
.children(":selected")
.val();
//trigger mouseover event handler
mapMouseOver({id : key});
}
wykona zdarzenie mouseover w oparciu o wybór rozwijanej
To działa idealnie. –