【发布时间】:2021-11-05 12:33:15
【问题描述】:
我有一张美国的 JavaScript D3 地图,我正在尝试在悬停时创建“阴影”效果,并带有均匀分布的边界线。我的代码(如下)确实有一些预期的效果,但边界没有完全显现。下面的截图是以悬停在一个县为例。
我的 js 文件看起来像:
# collect the map, set up nation and counties
d3.json("https://cdn.jsdelivr.net/npm/us-atlas@3/counties-albers-10m.json").then(
function(us) {
svg.append("path")
.datum(topojson.feature(us, us.objects.nation))
.attr("fill", "#f5f5f5")
.attr("class", "nation")
.attr("d", path)
svg.selectAll("path.county")
.data(topojson.feature(us, us.objects.counties).features)
.join("path")
.attr("id", function(d) {
return d["id"]
})
.attr("class", "county")
.attr("fill", "#f5f5f5")
.attr("stroke", "#ffffff")
.attr("stroke-linejoin", "round")
.attr("d", path)
# add in my data
d3.csv("file.csv").then(
function(data) {
...
data.forEach(function(d) {
d3.select(`[id="${d['FIPS']}"]`)
.attr("fill", function() {
if (d["URL"] != "") {return getColor()}
else {return "#f5f5f5"}
})
.on("mouseover", function() {
d3.select(`[id="${d['FIPS']}"]`)
.style("stroke", "rgba(35, 31, 32, 0.1)")
.style("stroke-width", 2)
})
.on("mouseout", function() {
d3.select(`[id="${d['FIPS']}"]`)
.style("stroke", "#ffffff")
.style("stroke-width", 1)
})
}
)
}
)
【问题讨论】:
-
尝试
raise()选中的元素:d3.select([id="${d['FIPS']}"]).style("stroke", "rgba(35, 31, 32, 0.1)").style("stroke-width", 2).raise()。
标签: javascript html d3.js