我知道目前无法动态更改地图的范围。
所以相反,我试图:
创建地图 发生了一些事件,然后我废弃了地图并绘制了一张新的地图,其中包含新的细节,包括新的投影。
问题是我无法正确废弃旧地图。我试图获取 map 变量,在 svg 属性上调用 remove(),出于性能目的使用“delete svg”,然后开始解构对象。然后将映射变量重新分配给函数 A 的结果,其中函数 A 只是设置了一个新映射。
创建新地图的功能:
function createMap (latlon){
var basicMap = new Datamap({
element: document.getElementById("basic"),
setProjection: function(element) {
var projection = d3.geo.equirectangular()
.center(latlon)
.rotate([0, 0])
.scale(1200)
.translate([element.offsetWidth / 2, element.offsetHeight / 2]);
var path = d3.geo.path()
.projection(projection);
return {path: path, projection: projection};
},
projection: "mercator",
scope: 'world',
fills: {
defaultFill: "#ABDDA4",
},
responsive: true,
done: function(datamap){
datamap.svg.call(d3.behavior.zoom().on("zoom", redraw));
$("#resetZoom").on("click", function(){
resetZoom();
})
function redraw() {
datamap.svg.selectAll("g").attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
function resetZoom() { datamap.svg.selectAll("g").attr("transform", "translate(0,0)scale(1.0)"); }
},
});
return basicMap
}
销毁函数:
function cleanUp(map){
map.svg.remove();
delete map.svg;
delete map;
}
我将地图初始化basic
如下
basic = createMap([2,46]);
然后我稍后清理地图(我的破坏功能)并重新分配:
cleanUp(basic);
basic = createMap([personLon, personLat])
从表面上看,它工作正常。而且性能还可以。但是,它并不能真正正常工作。例如缩放功能不再起作用。当按下缩放按钮时,它正在寻找一个地图变量,它再也找不到了。这没有任何意义,因为新地图为按钮等创建了新的点击处理程序。它几乎可以工作。
但这只是行不通。有小费吗?谢谢。