gpt4 book ai didi

javascript - 在放大/缩小 map 时保持 D3 对象大小不变

转载 作者:行者123 更新时间:2023-11-29 19:31:13 25 4
gpt4 key购买 nike

我正在按照 http://bl.ocks.org/d3noob/raw/5193723/ 中的示例进行操作

示例中绘制的圆圈在放大时会变大。我想不出一种方法可以使圆圈的大小保持不变。

有什么想法吗?

Edit1:任何关于如何保持圆弧半径不变的想法。我已经想出了使圆圈保持恒定半径的方法,如下所示:

            g1.append("circle")
.attr("cx", 200)
.attr("cy", 200)
.attr("r", 10)
.style("fill", "red");

var zoom = d3.behavior.zoom().on("zoom", function () {

g1.selectAll("circle")
.attr("transform", "translate(" + d3.event.translate.join(",") + ")scale(" + d3.event.scale + ")")
.attr("r", function(d) {
return 10/d3.event.scale;
});
});

同样,我有圆弧形饼图,我希望在缩放时保持其大小:

                    var r = 4;
var p = Math.PI * 2;

var arc = d3.svg.arc()
.innerRadius(r - 2)
.outerRadius(r - 1)
.startAngle(0)
.endAngle(p * d.value1);
var arc2 = d3.svg.arc()
.innerRadius(r - 3)
.outerRadius(r - 2)
.startAngle(0)
.endAngle(p * d.value2);

var projection = d3.geo.mercator()
.center([0, 5])
.scale(200)

var translate = "translate(" + projection([77, 13])[0] + ", " + projection([77, 13])[1] + ")";
g.append("path")
.attr("d", arc)
.attr("fill", "maroon")
.attr("transform", translate);
g.append("path")
.attr("d", arc2)
.attr("fill", "green")
.attr("transform", translate);

关于如何使弧形路径保持相同大小有什么建议吗?

最佳答案

您必须在缩放事件处理程序中添加一些额外的处理。将圆的半径设置为其标称值 (5) 除以缩放因子 (zoom.scale())。这样,当应用缩放比例时,结果将是一个恒定的外观尺寸。像这样的东西:

var zoom = d3.behavior.zoom()
.on("zoom",function() {
g.attr("transform","translate("+
d3.event.translate.join(",")+")scale("+d3.event.scale+")");
g.selectAll("circle")
.attr("d", path.projection(projection))
.attr("r", 5/zoom.scale());
g.selectAll("path")
.attr("d", path.projection(projection));
});

关于javascript - 在放大/缩小 map 时保持 D3 对象大小不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com