我正在制作一个由维度归类的意大利城市地图(更多人 - >更大半径)
这里是预览(检查完整代码)http://www.danielepennati.com/prove/mapping/ita_popolazione.html
当你放大地图我缩放半径,它工作正常
s = d3.event.scale; //s is defined in the main function
g.selectAll('circle')
.attr("r", function(d) { return raggioCittà(rateByIdCF[d.id][anno]) / s; })
如果您使用地图左侧的选项更改年份并使用新数据更新圆半径...如果地图未缩放,则一切顺利 如果地图是缩放的,我尝试设置缩放的半径(如果我记录了半径的值是正确的),但是在圆形元素的“r”值中,它是未缩放的,圆圈显然是太大了 这是更新年份选择圈子的代码:
g.selectAll(".punto_comun")
.data(topojson.feature(base, base.objects.com2011_g).features)
.attr('fill', function(d) {
if(rateByIdCF[d.id]){
if(raggioCittà(rateByIdCF[d.id][anno]) < 4){ return '#0042b0'}
}
return '#ff0000';
})
.attr("r", function(d) {
if(rateByIdCF[d.id]){
//check if map is scaled, if yes scale the radius down
if(s){ return raggioCittà(rateByIdCF[d.id][anno] / s); }
//if not use the standard radius
return raggioCittà(rateByIdCF[d.id][anno]);
}
})
我真的不明白为什么它不能正常工作......也许我对缩放行为缺失了一些东西
我真的很感激任何建议
感谢
丹尼尔
答案 0 :(得分:0)
问题是以下代码结构:
var s;
function move(s, t) {
s = ...;
}
s
变量指的是不同的东西。顶级s
在函数s
的声明中被move
遮蔽。也就是说,s
内的move
是指第一个参数,而不是全局s
。对它的任何更改只会影响该参数(因此只有本地范围),而不会影响您想要更改的s
。
要修复,只需使用不同的变量名称。