Javascript 停止在D3世界地图中缩放气泡
我目前正在制作一张D3世界地图,在这张地图上,我引入了一个缩放功能,可以根据点击量放大到任何国家或县的边界级别 我添加了指向肯尼亚各县的气泡,在我添加的缩放功能上放大了。但是我想在地图缩放时停止气泡的缩放 这是我目前工作的一本书 下面是用于缩放的代码Javascript 停止在D3世界地图中缩放气泡,javascript,jquery,d3.js,Javascript,Jquery,D3.js,我目前正在制作一张D3世界地图,在这张地图上,我引入了一个缩放功能,可以根据点击量放大到任何国家或县的边界级别 我添加了指向肯尼亚各县的气泡,在我添加的缩放功能上放大了。但是我想在地图缩放时停止气泡的缩放 这是我目前工作的一本书 下面是用于缩放的代码 function clicked(d) { var conditionalChange = d; if(d.properties.hasOwnProperty("Country")){ var country = d
function clicked(d) {
var conditionalChange = d;
if(d.properties.hasOwnProperty("Country")){
var country = d.properties.Country;
var obj = data.objects.countries.geometries;
$.each(obj, function(key, value ) {
if(countries[key].properties.name == "Kenya")
{
conditionalChange = countries[key].geometry;
}
});
}
d = conditionalChange;
if (active.node() === this) return reset();
active.classed("active", false);
active = d3.select(this).classed("active", true);
var bounds = path.bounds(d),
dx = bounds[1][0] - bounds[0][0],
dy = bounds[1][1] - bounds[0][1],
x = (bounds[0][0] + bounds[1][0]) / 2,
y = (bounds[0][1] + bounds[1][1]) / 2,
scale = 1.2/ Math.max(dx / width, dy / height),
translate = [width / 2 - scale * x, height / 2 - scale * y];
g.transition()
.duration(750)
.style("stroke-width", 1/ scale + "px")
.attr("transform", "translate(" + translate + ")scale(" + scale + ")");
}
function reset() {
active.classed("active", false);
active = d3.select(null);
g.transition()
.duration(750)
.style("stroke-width", "1px")
.attr("transform", "");
}
您正在缩放整个
g
元素,这将有效地缩放地图。一切都会变大;但是,对于贴图线,您已调整笔划以反映g
比例因子的变化:
g.transition()
.duration(750)
.style("stroke-width", 1/ scale + "px")
.attr("transform", "translate(" + translate + ")scale(" + scale + ")");
要保持圆的大小相同,您必须根据g
比例因子修改每个圆的r
属性,从而对圆进行相同的调整:
g.selectAll(".city-circle")
.transition()
.attr("r", 5 / scale )
.duration(750);
但是,由于您实际上没有将类city circle应用于您的圆,因此在附加它们时也需要这样做:
.attr(“班级”、“城市圈”)
并且,正如重置时重置笔划宽度一样,您需要重置圆“r
:
g.selectAll(".city-circle")
.transition()
.attr("r", 5)
.duration(750);
这给了我们共同的力量。太棒了!!正是我想要的。非常感谢!!