【发布时间】:2012-11-27 22:35:20
【问题描述】:
我有一张经过翻译的地图,使其能够正确地放在画布上。
我正在尝试实现一种缩放它的方法,它确实有效,但是当您放大时它会从中心移开,而不是在鼠标甚至画布上居中。
这是我的代码:
function map(data, total_views) {
var xy = d3.geo.mercator().scale(4350),
path = d3.geo.path().projection(xy),
transX = -320,
transY = 648,
init = true;
var quantize = d3.scale.quantize()
.domain([0, total_views*2/Object.keys(data).length])
.range(d3.range(15).map(function(i) { return "map-colour-" + i; }));
var map = d3.select("#map")
.append("svg:g")
.attr("id", "gb-regions")
.attr("transform","translate("+transX+","+transY+")")
.call(d3.behavior.zoom().on("zoom", redraw));
d3.json(url_prefix + "map/regions.json", function(json) {
d3.select("#regions")
.selectAll("path")
.data(json.features)
.enter().append("svg:path")
.attr("d", path)
.attr("class", function(d) { return quantize(data[d.properties.fips]); });
});
function redraw() {
var trans = d3.event.translate;
var scale = d3.event.scale;
if (init) {
trans[0] += transX;
trans[1] += transY;
init = false;
}
console.log(trans);
map.attr("transform", "translate(" + trans + ")" + " scale(" + scale + ")");
}
}
我发现将初始翻译添加到新翻译 (trans) 对第一次缩放有效,但对于所有后续缩放,情况会变得更糟。有什么想法吗?
【问题讨论】:
标签: javascript canvas d3.js translate